智能指针
- 申请单个
std::unique_ptr<int> intPtr{};
- 申请5个空间
std::unique_ptr<int[]> intPtr(new int(5));
C++14以后
- 申请5个空间,相当于上述的2
std::unique_ptr<int[]> intPtr{std::make_unique<int[]>(5)};
- 赋值为5,初始化
std::unique_ptr<int> intPtrA{std::make_unique<int>(5)};
智能指针具有唯一性
普通指针的创建及释放
int* a = new int[5];
delete[] a;
智能指针的释放
intPtr.reset();
释放申请的内存,并将指针清零
其他使用
intPtr.get();
intPtr.release();
intPtr.move();
共享智能指针
std::shared_ptr<int> ptrA{};
此时该指针指向0
std::shared_ptr<int> ptrA{new int};
此时该指针指向一个地址
std::shared_ptr<int[]> ptrA{new int[5]{5,4,3,2,1}};
此时该指针指向一个数组
std::shared_ptr<>
新式的符号
std::shared_ptr<int> ptrA{std::make_shared<int>(5)};
不可定义数组类型
访问的时候
std::cout << *ptrA;
利用新式符号,举例共享指针的使用
std::shared_ptr<int> ptrB{ptrA};
返回long型,计数ptrA使用的次数
ptrA.use_count();