unique_ptr:unique_ptr是一个独占所有权的指针,这意味着一次只能有一个unique_ptr指向一个对象。unique_ptr控制一个对象的生命周期,当unique_ptr被销毁(例如超出其作用域)时,它所指向的对象也会被自动删除。不能复制unique_ptr到另一个unique_ptr,但是可以移动它。通常用于资源的唯一管理,例如一个文件
一个对象只能被单个 unique_ptr 所引用,所以禁止拷贝,而且在向另一个 unique_ptr 赋值的时候,要特别留意,必须用 std::move() 函数显式地声明所有权转移。赋值操作之后,指针的所有权就被转走了,原来的 unique_ptr 变成了空指针,新的 unique_ptr 接替了管理权,保证了所有权的唯一性。不过还是尽量少用 unique_...
std::unique_ptr<int> p3 = std::make_unique<int>(30); // std::unique_ptr<int> p4 = p3; // 错误,不可复制 std::unique_ptr<int> p4 = std::move(p3); // 正确:所有权转移 1. 2. 3. 4. 3.3 自动释放资源 当unique_ptr离开作用域时,它会自动调用delete释放所管理的对象,避免内存泄漏。
在C++ 中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针(smart pointer)。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄露。智能指针的核心实现技术是引用计数,每使用它一...
C++中的智能指针包括shared_ptr、unique_ptr、weak_ptr和auto_ptr,以下是对它们的理解:1. unique_ptr 功能:独占使用指针时的最佳选择,确保同一时间只有一个智能指针可以指向对象。 特性:为裸指针添加了限制,有效预防资源泄漏。其赋值机制允许在特定情况下安全地重用指针,通过std::move函数实现所有权...
unique_ptr的基本操作有: //智能指针的创建 unique_ptr<int> u_i; //创建空智能指针 u_i.reset(new int(3)); //绑定动态对象 unique_ptr<int> u_i2(new int(4));//创建时指定动态对象 unique_ptr<T,D> u(d); //创建空 unique_ptr,执行类型为 T 的对象,用类型为 D 的对象 d 来替代默认...
shared_ptr的产生与unique_ptr类似,都是为了解决raw pointer的new和delete的成对使用,导致的野指针、内存泄漏、重复释放内存等。 不过shared_ptr与unique_ptr场景又有所不同,这里主要是一个raw pointer在不同的代码块之间传来传去的场景,或者指针指向的内存比较大,这段内存可以切分成很多小部分,但是他们却需要共享彼...
unique_ptr 类型智能指针在设计上最显著的特点是内部托管的指针一旦被创建就不能被任何形式的复制给另一...
C++11引入的智能指针(std::shared_ptr、std::unique_ptr、std::weak_ptr)通过自动化资源管理,极大降低了内存泄漏和悬垂指针的风险。 自从C++11智能指针推出后,关于 shared_ptr 的使用,分为了两派,一派认为Raw指针不应该再出现在代码中,另外一派认为要谨慎使用 shared_ptr, 大多数时候还是要使用Raw指针更合理。
shared pointer in C++ is a reference counted pointer. It follows concept of shared ownership after initializing a shared_ptr you can copy it.