C++11 引入了 3 个智能指针类型:
std::unique_ptr<T>
:独占资源所有权的指针;std::shared_ptr<T>
:共享资源所有权的指针,它的原理是使用引用计数实现对同一块内存的多个引用,在最后一个引用被释放时,指向的内存才释放;std::weak_ptr<T>
:共享资源的观察者,需要和std::shared_ptr
一起使用,不影响资源的生命周期。
1. std::unique_ptr
{
std::unique_ptr<int> uptr = std::make_unique<int>(200);
std::unique_ptr<int> uptr1 = uptr; // 编译错误,std::unique_ptr<T> 是 move-only 的
std::unique_ptr<int> uptr2 = std::move(uptr); // 转为右值后
assert(uptr == nullptr);
}