std::shared_ptr 也可以用来管理动态分配的数组,但需要注意使用 std::shared_ptr 的数组特化。 #include <iostream> #include <memory> void example() { // 使用 std::shared_ptr 管理动态分配的数组 std::shared_ptr<int[]> ptr(new int[3]{1, 2, 3}); std::cout << "Array: "; for (int ...
方式一:shared_ptr<string> pTom{new string("tom")}; 方式二:shared_ptr<string> pTom; pTom.reset(new string("tom")); 方式三:shared_ptr<string> pTom = make_shared<string>("tom"); 推荐:使用方式三,更快(一次复制),更安全 使用 shared_ptr<string> pTom = make_shared<string>("tom");...
std::shared_ptr<int> sp(newint[10], std::default_delete<int[]>()); 也可以使用一下的lambda表达式来自定义删除函数 std::shared_ptr<int> sp(newint[10], [](int*p) {delete[] p; }); 实际上,除非需要共享目标,否则unique_ptr更适合使用数组: std::unique_ptr<int[]> up(newint[10]);/...
// 创建一个 shared_ptr 并指向新建的 MyClass 对象 std::shared_ptr<MyClass> ptr1 = std::make_shared<MyClass>(42); // 访问对象的方法 std::cout << "Value: " << ptr1->GetValue() << std::endl; // 创建另一个 shared_ptr,共享 ptr1 所指向的对象 std::shared_ptr<MyClass> ptr2(...
std::shared_ptr 是一种智能指针,它能够记录多少个 shared_ptr 共同指向一个对象,从而消除显示的调用 delete,当引用计数变为零的时候就会将对象自动删除。 std::shared_ptr 可以通过 get() 方法来获取原始指针,通过 reset() 来减少一个引用计数, 并通过use_count()来查看一个对象的引用计数。例如: ...
默认情况下,std::shared_ptr会调用delete来清空内存。当使用new[] 分配内存时,需要调用delete[] 来释放内存,否则会有内存泄露。 但是在 C++11 中 std::default_delete可以解决这个问题。 // unique 申请数组内存std::unique_ptr<int[], std::default_delete<int[]>> ac1 = std::make_unique<int[]>(10...
不同于std::shared_ptr构造函数,std::allocate_shared不接受另外的自定义删除器:它用提供的分配器来进行控制块和T对象的析构,及其共享内存块的解分配。 std::shared_ptr支持数组类型(从 C++17 起),但std::allocate_shared不支持。boost::allocate_shared支持此功能。
用多个share_ptr指向同一个对象,这多个share_ptr必须有关联,也就是通过智能指针给智能指针赋值,而不是用原始指针。指向同一个对象的share_ptr必须有关联,这样才能对同个对象进行准确的引用计数。 如 {A*p=newA(1);std::shared_ptr<A>p1(p);//p1的usecount为1std::shared_ptr<A>p2(p);//p2的usecount...
提供到所存储数组的索引访问 (公开成员函数) use_count 返回shared_ptr所指对象的引用计数 (公开成员函数) unique (C++20 前) 检查所管理对象是否仅由当前shared_ptr的对象管理 (公开成员函数) operator bool 检查是否有关联的管理对象 (公开成员函数)
//数组放在堆中std::shared_ptr<Sample>p(newSample[5],std::default_delete<Sample[]>()); //仿函数方式classDeleter{public:voidoperator()(Sample*x){std::cout<<"Deleter function called"<<std::endl;delete[]x;}};// 构造函数传递自定义删除器指针std::shared_ptr<Sample>p2(newSample[5],Deleter...