std::shared_ptr<> 是C++标准库中的一个智能指针,用于自动管理具有引用计数的动态分配的对象。它确保当没有任何 std::shared_ptr 指向对象时,对象会被自动删除。从 std::shared_ptr<> 获取原始指针(即裸指针)是一个常见操作,但需要注意避免悬空指针等问题。
#include<iostream>#include<memory>#include<string>intmain(){std::shared_ptr<std::string>data=std::make_shared<std::string>("Hello, World!");// 使用成员访问操作符(->)来获取字符串内容或调用成员函数std::cout<<data->c_str()<<std::endl;// 输出: Hello, World!std::cout<<data->size(...
1,"i");//jerry -> Jerryvector<shared_ptr<string>>vtWhoCleanRoom;vtWhoCleanRoom.push_back(pTom);vtWhoCleanRoom.push_back(pJerry);vtWhoCleanRoom.push_back(pTom);//此时vtWhoCleanRoom的内容为Tom Jerry Tom*pTom
unique_ptr是独占型指针,其计数永远为1,无拷贝构造函数,但可以使用std::move转移资源所有权。 weak_ptr没有资源所有权,一般用来辅助shared_ptr使用,多使用于多线程,循环等场景。 shared_ptr可以多个指针绑定同一对象,同一堆空间每多一个shared_ptr指向该空间,计数就+1。计数为0时析构。 可以使用get()方法获得智能...
使用std::make_unique和std::make_shared来创建智能指针。 避免使用裸指针,尽可能使用智能指针。 注意避免std::shared_ptr的循环引用问题,必要时使用std::weak_ptr。 在类的公共接口中返回std::unique_ptr来转移所有权。 在需要共享但不参与所有权的场景中使用std::weak_ptr。
std::shared_ptr<int>sp=std::make_shared<int>(10)int*pRaw=sp.get(); 但取出的原始指针,可能被释放,因此使用这个指针是不安全的,如在不同线程中,应该对该指针做加锁保护,或者以weak_ptr取代原始指针,例:https://www.jianshu.com/p/661b79cde7c7...
std::shared_ptr<Test> p(new Test); 1. 2. (6) std::shared_ptr的大小是原始指针的两倍,因为它的内部有一个原始指针指向资源,同时有个指针指向引用计数。 (7)引用计数是分配在动态分配的,std::shared_ptr支持拷贝,新的指针获可以获取前引用计数个数。
非法操作std::shared_ptr<Entity>(this)将调用shared_ptr(_Ux* _Px) // construct shared_ptr object that owns _Px,构造新的智能指针,新的智能指针同样指向此对象,但它与原来的智能指针使用不同的引用计数,所以a的引用计数不会增加,使用std::shared_ptr<Entity>(this)获取到的智能指针在释放时会第二次析构...
std::shared_ptr ,表示智能指针类,通过指针保留一个对象的共享所有权。 多个shared_ptr可以共用同一个对象。 当一下情况发生时,这个对象被销毁,内存被释放: 最后一个拥有这个对象的共享指针被销毁的时候。 最后一个拥有这个对象的共享指针被赋予其他指针值或者reset() ...
您可以从shared_ptr获取指针或引用并将其向下转换: