方式三:shared_ptr<string> pTom = make_shared<string>("tom"); 推荐:使用方式三,更快(一次复制),更安全 使用 shared_ptr<string> pTom = make_shared<string>("tom"); shared_ptr<string> pJerry = make_shared<string>("jerry"); (*pTom)[0] = ’T’; //tom -> Tom pJerry->replace(0,...
主要用法: 1.创建shared_ptr:make_shared()、shared_ptr构造函数; 2.销毁shared_ptr:将其指针设置为NULL或使用reset函数; 3.拷贝赋值shared_ptr:可以使用=操作符或assign函数; 4.使用shared_ptr:使用它的解引用操作符*和->; 5.持有共享对象的引用计数:使用函数use_count()。©...
shared_ptr是最像指针的智能指针,在很多的组件中被应用,shared_ptr包装了new操作符在堆上分配的动态对象,实现的是引用计数型的智能指针,可以被自由的拷贝和赋值,当没有代码使用(引用计数减为0)时会删除包装的动态分配的对象。 shared_ptr也可以安全地放在标准的容器中,是在STL容器中存储指针的最标准解法。 原理 ...
C++11提供了三种智能指针:std::shared_ptr, std::unique_ptr, std::weak_ptr,使用时需添加头文件<memory>。 shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。每使用他一次,内部的引用计数加1,每析构一次,内部的引用计数减1,减为0时,删除所指向的堆内存。shared_ptr内部的引用计数是安全的,...
shared_ptr像普通指针一样使用,可以将*和->与 shared_ptr 对象一起使用,也可以像其他 shared_ptr 对象一样进行比较; 三shared_ptr的使用 3.1.构造函数创建 1.shared_ptr<T> ptr;//ptr 的意义就相当于一个 NULL 指针 2.shared_ptr<T> ptr(new T());//从new操作符的返回值构造 ...
配合auto使用:make_shared函数可以赋值给auto,这样比较简单 代码语言:javascript 复制 auto p=make_shared<vector<string>>(); 三、shared_ptr的拷贝、赋值与引用计数 引用计数:shared_ptr类所指向的对象都有一个引用计数 但对shared_ptr类进行拷贝时,计数器就会增加。例如:当用一个shared_ptr初始化另一个shared_...
shared_ptr 是通过指针保持对象共享所有权的智能指针。多个 shared_ptr 对象可占有同⼀对象。这便是所谓的引⽤计数(reference counting)。⼀旦最后⼀个这样的指针被销毁,也就是⼀旦某个对象的引⽤计数变为0,这个对象会被⾃动删除。这在⾮环形数据结构中防⽌资源泄露很有帮助。使得指针可以共享对象...
《为何优先选用unique_ptr而不是裸指针?》中说到,如果有可能就使用unique_ptr,然后很多时候对象是需要共享的,因此shared_ptr也就会用得很多。shared_ptr允许多个指向同一个对象,当指向对象的最后一个shared_ptr销毁时,该对象也就会自动销毁。因此,善用shared_ptr,能够远离内存泄漏。
cout<<"shred_ptr的使用次数是"<<ptr.use_count()<<std::endl;//次数是1std::shared_ptr<int>ptrAnother1=ptr;std::cout<<"shred_ptr经过拷贝之后的使用次数是"<<ptr.use_count()<<std::endl;//次数是2std::shared_ptr<int>ptrAnother2(ptr);std::cout<<"shred_ptr经过拷贝之后的使用次数是"<<...