Shared_ptr &operator=(Shared_ptr &&rhs) { Shared_ptr{std::move(rhs)}.swap(*this);return*this; }voidreset()noexcept{ Shared_ptr{}.swap(*this); }voidreset(nullptr_t)noexcept{reset(); }voidreset(T *ptr){ Shared_ptr
shared_ptr可以协调对象的析构,但这仅限于其自身的拷贝(也是shared_ptr)之间。 // 在函数被调用时ptr被创建并初始化 void process(shared_ptr<int> ptr) { // 使用ptr } // ptr离开作用域,被销毁 int main() { shared_ptr<int> p(new int(42)); // 引用计数为1 process(p); // 拷贝p会递增它...
1.1 shared_ptr 参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr std::shared_ptr是通过指针保持对象共享所有权的智能指针。多个shared_ptr对象可占有同一对象。下列情况之一出现时销毁对象并解分配其内存: 最后剩下的占有对象的shared_ptr被销毁; 最后剩下的占有对象的shared_ptr被通过operator=或reset(...
weak_ptr指针通常不单独使用,只能和 shared_ptr 类型指针搭配使用,可以作为shared_ptr类内的对象。 unique_ptr unique_ptr 是一个独享所有权的智能指针,它提供了严格意义上的所有权。 nullptr NULL是一个宏,它被定义为0(也就是int型的零),或者0L(long型的零)。当想传一个空指针,让程序调用特定重载函数,宏...
智能指针share_ptr记录 2019-12-23 10:39 −shared_ptr 是一个共享所有权的智能指针,允许多个指针指向同一个对象。shared_ptr 对象除了包括一个对象的指针,还包括一个引用计数器。当每给对象分配一个share_ptr的时候,引用计数加一;每reset一个share_ptr, 或者修改对象的指向(指向其他对象或者赋值nullptr)... ...
std::shared_ptr 是通过指针保持对象共享所有权的智能指针。多个 shared_ptr 对象可占有同一对象。下列情况之一出现时销毁对象并解分配其内存: 最后剩下的占有对象的 shared_ptr 被销毁; 最后剩下的占有对象的 shared_ptr 被通过 operator= 或reset() 赋值为另一指针。 用delete 表达式或在构造期间提供给 ...
shared_ptr允许多个指针指向同一个变量。 unique_ptr则独占所指向的变量。 weak_ptr则指向shared_ptr所管理的变量。 2.智能指针的基础用法 1.智能指针的初始化 智能指针是基于类模板生成的,因此,要初始化一个智能指针,就必须声明指针所指向的数据类型,不然智能指针里面包含的原始指针是个空指针。
classMyClass{int*ptr;public:MyClass(){// 完蛋,忘记初始化ptr了}};// 使用ptr时可能崩溃 1. 2. 3. 4. 5. 6. 7. 正确做法: 复制 classMyClass{int*ptr;public:MyClass():ptr(nullptr){// 构造时就初始化// 或者分配内存ptr=newint(42);}}; ...
在消费者线程中,我们使用获取屏障来确保在读取到新的ptr值后,接下来读取的数据是最新的。 #include <atomic> #include <thread> #include <cassert> #include <iostream> std::atomic<int*> ptr(nullptr); // 使用原子指针来保证指针操作的原子性 int data; // 普通全局变量data // 生产者函数 void ...
和shared_ptr不同,可以有多个shared_ptr指向同一个内存,只能有1个unique_ptr指向某个内存。因此unique_ptr不支持普通的拷贝和赋值。 一,先来个表格,唠唠unique_ptr 小例子索引 小例子 include <iostream>#include<memory>#include<vector>using namespacestd;classTest{public: ...