#include <iostream> #include <memory> void dynamicArrayManagement() { std::shared_ptr<int> sp = std::make_shared<int[]>(5); for (int i = 0; i < 5; ++i) { sp[i] = i * 10; } // 处理数组数据 for (int i = 0; i < 5; ++i)
1.2 为什么不用shared_ptr<void> 使用shared_ptr<void>代替void*可以解决声明周期管理的问题。shared_ptr有足够的类型信息以了解如何正确销毁它指向的对象。 structday{ // ...things... std::shared_ptr<void> user_data; }; structmonth{ std::vector<day> days; std::shared_ptr<void> user_data; };...
std::shared_ptr<void>spv=std::make_shared<int>(10);std::shared_ptr<int>spi=std::static_pointer_cast<int>(spv);std::cout<<*spi<<std::endl;// 输出:10 1. 2. 3. 5.2 注意事项 使用std::static_pointer_cast、std::dynamic_pointer_cast等安全的转换方式。 避免使用普通指针的转换方式,可能...
voiduseA(){ if(autoshared_a = a_ptr.lock()) {// 使用 lock() 获取 shared_ptr std::cout <<"Using A\n"; }else{ std::cout <<"A 已被释放,无法使用\n"; } } }; voidexample(){ autoa = std::make_shared<A>(); autob = std::make_shared<B>(); a->b_ptr = b; b->a_...
由于std::shared_ptr<void>不持有类型信息,因此std::dynamic_pointer_cast无法用于std::shared_ptr<void>的转换。std::reinterpret_pointer_cast是C++23中新增的一个转换函数,可以用于在任意类型之间进行智能指针的转换,但它是危险的,因为它不检查类型兼容性。 3. 学习转换函数的用法 std::static_...
#include<iostream>#include<memory>#include<thread>#include<atomic>voidworker(std::shared_ptr<int>ptr){std::shared_ptr<int>loaded_ptr=std::atomic_load(&ptr);std::cout<<"Loaded value: "<<*loaded_ptr<<std::endl;}intmain(){std::shared_ptr<int>ptr=std::make_shared<int>(42);std::thr...
std::vector<std::shared_ptr<void>> trash_bin; std::array<void *, n_args> passed_args_ptr; //变量类型函数句柄, 变量名是decorated_func R(*decorated_func) (Args...); public: FunTrait(R (*func)(Args...), int num_required = 0){ ...
#include <iostream>#include <memory>#include <vector> class Observer {public: void notify%28%29 { std::cout << "Observer notified%21" << std::endl; }}; class Subject { std::vector<std::shared_ptr<Observer>> observers; // 共享观察者列表public: void addObserver%28const std::shared_pt...
class A : public std::enable_shared_from_this<A> { public: void func() { shared_from_this(); } } 关于其使用,需要强调如下两点: 必须以public继承std::enable_shared_from_this 在使用shared_from_this()接口时,必须已经存在相应的控制块 否则,程序会报异常。 6 总结 通过本文,基本总结了shared_...
void del(void(*)()) {} void fun() {} int main() { std::shared_ptr<void()> ff(fun, del); (*ff)(); } 使用std::make_shared或者std::allocate_shared创建的共享指针,控制块和管理对象的内存在创建时是一个单独的区块。管理对象被构建在控制区块的数据成员位置。当shared_ptr通过shared_ptr构造...