push_back(std::make_shared<int[]>(10)); std::cout << "std::shared_ptr array is stored in std::vector." << std::endl; return 0; } 在这个示例中,我们将一个 std::shared_ptr 管理的数组存储在 std::vector 中,方便进行管理和操作。 使用场景 动态数组管理
shared_ptr & shared_array 最像指针, smart_ptr库中最有价值、最重要的组成部分,也是最有用的。 包装了new操作在堆上分配的动态对象 ,实现的是引用计数型的指针。 可以安全的放到标准容器中。 重载了* 和 -> 用get()得到原始指针 reset将引用数减1,至0时删除 支持比较运算符,基于内部指针 基于虚函数的多...
//Project - SharedPtrArray#include<iostream>#include<memory>usingnamespacestd;template<typenameT>voiddelete_array(T*p){cout<<"delete_array"<<endl;delete[]p;}classFish{public:~Fish(){cout<<"Fish::Fish~()"<<endl;}};intmain(){shared_ptr<Fish[]>a(newFish[4]);a=nullptr;//a指针指向的...
在C++中,shared_ptr默认用于管理单个对象的内存。若要使用shared_ptr管理动态分配的数组,需要使用shared_ptr<T[]>的形式。例如: cpp std::shared_ptr<int[]> arrayPtr(new int[10]); 自定义删除器: 由于shared_ptr默认使用delete来释放内存,而数组应使用delete[]来释放,因此需要提供一个自定...
//OK, pointer to int 999std::shared_ptr<int>sp(newint(999));template<typenameT >structarray_deleter{voidoperator()( Tconst* p){delete[] p; } };// pointer to int array, // (1) provide array deleterstd::shared_ptr<int>sp(newint[10], array_deleter<int>()); ...
#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 i = 0; i < 3; ++i) { std::cout << ptr[i] << " "; } std::cout << std::...
use_count() << endl; shared_ptr<char> ptr2 = make_share_array<char>(128); cout << ptr2.use_count() << endl; return 0; } 2.unique_ptr指针的使用 1.1unique_ptr初始化 std::unique_ptr 是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针,可以通过它的构造函数初始化一个...
shared_ptr<int>pArray(newint[12],[](int*p){ delete[]p; }); shared_ptr<A>pA(newA[12]);//异常因为系统释放pA是delete,pA应用delete[]pA; shared_ptr<A>pA(newA[12],[](A*p){ delete[]p; }); } default_delete 可用default_delete来做删除器。default_delete是标准库里的模板类 ...
std::shared_ptr<T>make_shared_array(size_tsize){returnstd::shared_ptr<T>(newT[size], std::default_delete<T[]>()); }intmain(){std::shared_ptr<int>p(newint[10], [](int* p){delete[] p;});//lambdastd::shared_ptr<int>p1(newint[10], std::default_delete<int[]>());//指...
若想要数组在多个shared_ptr之间共享,可以考虑使用shared_ptr<vector>或shared_ptr<array>。更多陷阱 使用shared_ptr时,注意不能直接通过同一个 raw pointer 指针来构造多个shared_ptr: int *p = new int{10}; shared_ptr<int> ptr1{ p }; shared_ptr<int> ptr2{ p }; // ERROR 很明显,每次通过 ...