在共享指针之间传递时,使用std::move:当将shared_ptr传递给函数或存储在容器中时,使用std::move可以避免不必要的原子操作。 代码语言:cpp 复制 std::shared_ptr<MyClass>ptr1=std::make_shared<MyClass>();std::shared_ptr<MyClass>ptr2=std::move(ptr1); 使用std::enable_shared_from_this:当需要从类...
值得一提的是,和 unique_ptr、weak_ptr 不同之处在于,多个 shared_ptr 智能指针可以共同使用同一块堆内存。并且,由于该类型智能指针在实现上采用的是引用计数机制,即便有一个 shared_ptr 指针放弃了堆内存的“使用权”(引用计数减 1),也不会影响其他指向同一堆内存的 shared_ptr 指针(只有引用计数为 0 时,堆...
my_shared_ptr & operator=(my_shared_ptr && dying_obj) { //my_shared_ptr(std::move(dying_obj))用移动构造函数创建出一个新的shared_ptr(此时dying_obj的内容被清除了) //再和this交换指针和引用计数 //因为this被交换到了当前的临时创建的my_shared_ptr里,this的引用计数-1 my_shared_ptr(std::m...
std::weak_ptr:弱引用的智能指针,它不共享指针,不能操作资源,是用来监视 shared_ptr 的。 共享智能指针(shared_ptr)是指多个智能指针可以同时管理同一块有效的内存,共享智能指针 shared_ptr 是一个模板类,如果要进行初始化有三种方式:通过构造函数、std::make_shared 辅助函数以及 reset 方法。共享智能指针对象初...
std::shared_ptr<int>p1(ptr); std::shared_ptr<int>p2(ptr);//错误 1. 2. 3. 4) 在初始化 shared_ptr 智能指针时,还可以自定义所指堆内存的释放规则,这样当堆内存的引用计数为 0 时,会优先调用我们自定义的释放规则。 在某些场景中,自定义释放规则是很有必要的。比如,对于申请的动态数组来说,shared...
复制auto_ptr对象时,把指针指传给复制出来的对象,原有对象的指针成员随后重置为nullptr。 这说明auto_ptr是独占性的,不允许多个auto_ptr指向同一个资源。 voidrunGame(){std::auto_ptr<Monster>monster1(newMonster());//monster1 指向 一个怪物monster1->doSomething();//怪物做某种事std::auto_ptr<Monster...
std::weak_ptr:弱引用的智能指针,它不共享指针,不能操作资源,是用来监视 shared_ptr 的。 共享智能指针(shared_ptr)是指多个智能指针可以同时管理同一块有效的内存,共享智能指针 shared_ptr 是一个模板类,如果要进行初始化有三种方式:通过构造函数、std::make_shared 辅助函数以及 reset 方法。共享智能指针对象初...
其实比较集中的讨论是 shared_ptr,unique_ptr 大家都知道只能传值,这样调用方丧失对这个对象的所有权,这才叫 unique_ptr,引用本身是一种分享 ownership 的传递方法,不过注意和指针不同的是,传递引用表示被调用的一方并不拥有这个对象,当然它可以另外保存一份。指针之所以被人讨厌,一方面是释放容易被忘记,另一方面就是...
shared_ptr智能指针可通过多种方式创建,包括构造空指针、明确指向、使用make_shared函数等。创建后,使用成员方法如get、reset、release等可获取底层指针、重置或释放内存。shared_ptr提供拷贝构造函数和移动构造函数,确保内存正确管理。使用std::move时,会调用移动构造函数,转移内存所有权。当初始化shared_...
std::cout<<"NAME Copy constructor"<<std::endl; } }; class SURNAME { public: std::vector<std::vector<std::shared_ptr<NAME>>> vec_2d; SURNAME(const std::vector<std::vector<std::shared_ptr<NAME>>> &m_vec):vec_2d(m_vec) { std::cout<<"Refernce count in SURNAME para construc...