std::shared_ptr内部使用了一个内存控制块,这个控制块上有一个字段叫引用计数器。引用计数器的作用是记录有多少std::shared_ptr实例指向同一个资源。 然而,引用计数的出现会对性能造成以下影响: 1)std::shared_ptr的大小是裸指针的两倍,因为它的内部包含一个指向该资源的裸指针,以及一个指向该资源引用计数所在的...
1template< typename T >2structarray_deleter3{4voidoperator()(Tconst*p)5{6delete[] p;7}8}; 通过以下代码来声明std::shared_ptr指针: std::shared_ptr<int> sp(newint[10], array_deleter<int>()); 此时,shared_ptr可正确的调用delete[]。 在C++11中,可以使用std::default_delete代替上面自己写的...
方式一:shared_ptr<string> pTom{new string("tom")}; 方式二:shared_ptr<string> pTom; pTom.reset(new string("tom")); 方式三:shared_ptr<string> pTom = make_shared<string>("tom"); 推荐:使用方式三,更快(一次复制),更安全 使用 shared_ptr<string> pTom = make_shared<string>("tom");...
新对象A(2)引用计数+1boolbone;{std::shared_ptr<A>sp2(sp1);//A(2)这个对象引用计数+1为2,sp1,sp2均指向这个对象,usecount均为2sp2.reset();//sp2指向的A(2)的引用计数-1,为1。sp2为null. sp1还是指向A(2),usecount为1std::shared_ptr<A>sp3(sp1);//A(2)的ref为2,即sp1与sp3的usecount...
swap():交换两个shared_ptr的内容。 与std::make_shared一起使用可以提高效率和减少内存碎片。 3. std::weak_ptr (C++11) 原理与特点: 提供对std::shared_ptr管理对象的弱引用,不增加引用计数。 可以检查所指向的对象是否仍然存活(未被删除)。 通过调用lock()方法临时获取一个可访问对象的shared_ptr,如果对象...
默认情况下,std::shared_ptr会调用delete来清空内存。当使用new[] 分配内存时,需要调用delete[] 来释放内存,否则会有内存泄露。 但是在 C++11 中 std::default_delete可以解决这个问题。 // unique 申请数组内存std::unique_ptr<int[], std::default_delete<int[]>> ac1 = std::make_unique<int[]>(10...
std::shared_ptr std::shared_ptr 是一种智能指针,它能够记录多少个 shared_ptr 共同指向一个对象,从而消除显示的调用 delete,当引用计数变为零的时候就会将对象自动删除。 std::shared_ptr 可以通过 get() 方法来获取原始指针,通过 reset() 来减少一个引用计数, 并通过use_count()来查看一个对象的引用计数...
shared_ptr 能在存储指向一个对象的指针时共享另一对象的所有权。此特性能用于在占有其所属对象时,指向成员对象。存储的指针为 get() 、解引用及比较运算符所访问。被管理指针是在 use_count 抵达零时传递给删除器者。 shared_ptr 亦可不占有对象,该情况下称它为空(empty) (空 shared_ptr 可拥有非空存储指...
shared_ptr能在存储指向一个对象的指针时共享另一对象的所有权。此特性能用于在持有其所属对象时,指向成员对象。存储的指针可以使用get()、解引用或比较运算符访问。被管理指针在使用计数抵达零时传递给删除器。 shared_ptr也可不持有对象,该情况下称它为空 (empty)(若以别名使用构造函数创建,空shared_ptr可拥有非...
template<typename N> class SISO{ using ItemPtr = std::shared_ptr<N>; public: SISO(u...