1.直接赋值:将一个`shared_ptr`赋值给另一个`shared_ptr`,这将使它们共享相同的资源。当没有任何其他`shared_ptr`引用该资源时,资源将被自动释放。```cpp std::shared_ptr<int>ptr1=std::make_shared<int>(42);std::shared_ptr<int>ptr2=ptr1;//直接赋值,ptr1和ptr2共享相同的int对象 ```2....
//指向一个值为42的int的shared_ptrshared_ptr<int>p=make_shared<int>(42);//p2指向一个值为10个'9'的stringshared_ptr<string>p2=make_shared<string>(10,'9');//p3指向一个值初始化为0的int数shared_ptr<int>p3=make_shared<int>(); 配合auto使用:make_shared函数可以赋值给auto,这样比较简单 代...
weak_ptr是对对象的一种弱引用,它不会增加对象的use_count,weak_ptr和shared_ptr可以相互转化,shared_ptr可以直接赋值给weak_ptr,weak_ptr也可以通过调用lock函数来获得shared_ptr。 weak_ptr指针通常不单独使用,只能和 shared_ptr 类型指针搭配使用。将一个weak_ptr绑定到一个shared_ptr不会改变shared_ptr的引用...
//shared_ptr 也可以直接赋值,但是必须是赋给相同类型的 shared_ptr 对象,而不能是普通的 C 指针或 new 运算符的返回值。 //当共享指针 a 被赋值成 b 的时候,如果 a 原来是 NULL, 那么直接让 a 等于 b 并且让它们指向的东西的引用计数加 1; // 如果 a 原来也指向某些东西的时候,如果 a 被赋值成 ...
如果有两个shared_ptr相互引用,那么这两个shared_ptr指针的引用计数永远不会下降为0,资源永远不会释放。weak_ptr是对对象的一种弱引用,它不会增加对象的use_count,weak_ptr和shared_ptr可以相互转化,shared_ptr可以直接赋值给weak_ptr,weak_ptr也可以通过调用lock函数来获得shared_ptr。
注意:如果shared_ptr对象的创建不可以用“=”直接赋值!!!,因为shared_ptr的构造器是explicit修饰的,指针不可以通过=直接转换为智能指针对象!!!,初始化的一些常见问题shared_ptr<int> p1 = new int(1024);错误,因为shared_ptr的单参数构造器有explicit修饰,不能从内置类型直接转换成为对象!!,所以此行编译报错!!
weak_ptr是用来解决shared_ptr相互引用时的死锁问题,如果说两个shared_ptr相互引用,那么这两个指针的引用计数永远不可能下降为0,资源永远不会释放。它是对对象的一种弱引用,不会增加对象的引用计数,和shared_ptr之间可以相互转化,shared_ptr可以直接赋值给它,它可以通过调用lock函数来获得shared_ptr。
只有引用计数为0时,shared_ptr才会自动释放引用的内存资源。对shared_ptr进行初始化时不能将一个普通指针直接赋值给智能指针,因为一个是指针,一个是类。可以通过make_shared函数或者通过构造函数传入普通指针,并可以通过get函数获得普通指针。 为什么要使用智能指针...
1、初始化与赋值。 可以通过构造函数直接初始化,也可以通过成员函数reset()或赋值运算符改变所指向的对象。 2、循环引用。 需要注意的是,两个std::shared_ptr互相引用对方可能会形成循环引用,从而导致引用计数永远不为0,使得资源无法释放。此时,应合理使用std::weak_ptr打破循环引用。 3、性能开销。 虽然std::...