头文件<memory>
unique _ptr智能指针:独占指针(内存占为己有,不支持拷贝和赋值)
在 C++ 中,智能指针是一种用于管理动态分配内存的机制,它们是通过模板类实现的。C++ 标准库提供了三种主要的智能指针模板类:
-
std::unique_ptr
:- 独占式智能指针,不允许多个
unique_ptr
指向同一个对象。 - 当
unique_ptr
对象被销毁时,它会自动释放所指向的内存。 - 适用于独占使用动态分配的资源的场景。
- 独占式智能指针,不允许多个
-
std::shared_ptr
:- 共享式智能指针,允许多个
shared_ptr
指向同一个对象。 - 每个
shared_ptr
都会维护一个引用计数,当最后一个shared_ptr
被销毁时,它会自动释放所指向的内存。 - 适用于多个部分需要共享访问同一个动态分配的资源的场景。
- 共享式智能指针,允许多个
-
std::weak_ptr
:- 弱引用式智能指针,不会增加引用计数。
- 通常与
shared_ptr
配合使用,用于打破引用循环的问题。 - 当最后一个
shared_ptr
被销毁时,相关联的weak_ptr
也会自动失效。
这三种智能指针模板类的使用方法如下:
#include <iostream>
#include <memory>
int main() {
// 使用 unique_ptr
std::unique_ptr<int> up(new int(42));
std::cout << *up << std::endl; // 输出 42
// 使用 shared_ptr
std::shared_ptr<int> sp(new int(24));
std::shared_ptr<int> sp2 = sp;
std::cout << *sp << ", " << *sp2 << std::endl; // 输出 24, 24
// 使用 weak_ptr
std::weak_ptr<int> wp = sp;
std::cout << wp.use_count() << std::endl; // 输出 2
return 0;
}