shared_ptr: ***注意***use_count是share_ptr的方法,用来记录有多少个指针指向该内存,reset关键字表示重置使指针不再指向原来的对象(而该指针自动指向nullptr)对象被释放(所有指针被重置,也就是没有指针指向该对象了)而指针依然存在。 **注意**当函数退出时,智能指针会被释放,它所指向的内存同样也被释放,而裸...
std::shared_ptr<int> p8 (std::unique_ptr<int>(newint)); std::shared_ptr<C> obj (newC); std::shared_ptr<int> p9 (obj, obj->data); 输出引用计数: 拷贝和转移: std::shared_ptr<int>foo; std::shared_ptr<int> bar(newint(10)); foo= bar;//copybar = std::make_shared<int>(2...
在C++2.0中其实很多地方都用到了这种思想,如智能指针(share_ptr)、右值引用等。它实际上就是一个模版指针类,封装了指向类的指针,当进行赋值操作时,是拷贝一个新对象赋值或者是指向同一个对象。在指向同一个对象时,为了防止对象被还有指向该对象的指针就被删除,设置引用计数,当指向的对象的指针需要修改该对象,而其...
weak_ptr本身也是一个模板类,但是不能直接用它来定义一个智能指针的对象,只能配合shared_ptr来使用,可以将shared_ptr的对象赋值给weak_ptr,并且这样并不会改变引用计数的值。查看weak_ptr的代码时发现,它主要有lock、swap、reset、expired、operator=、use_count几个函数,与shared_ptr相比多了lock、expired函数,但是...
ptrA= nullptr // 相等于ptrA.reset() ptrA.get()//获得原始指针 ptrA.swap(new B())//交换堆指针 weak_ptr作用:解决share_ptr的循环引用导致的不能析构问题,不增加引用计数,weak_ptr也是容器,托管对象是share_ptr对象 循环引用问题(伪代码): ...
share_ptr<int>pp=new int (5) //错误,称为间接初始化,左边其实是类,右边是指针,pp相当于对象。 //将指针拷贝,(可以是智能指针也可以是普通指针): shared_ptr<int> p4(pp); //将pp指针共享给 p1,使p1也可访问pp的内存 ,p4的计数器+1 //赋值或拷贝 p4=pp //前提是二者都为同类型智能指针 //...
当main函数结束时,share_ptr会自动释放内存。shared_ptr是C++标准库中的智能指针,它使用引用计数的方式来管理资源的生命周期。当一个shared_ptr对象不再被使用时,即没有任何其他shared_ptr对象指向该资源时,引用计数会减少到0,此时shared_ptr会自动释放内存。
大意为一个shared_ptr有两个重要成员变量,ref_count和shared_ptr,ref_count本身是原子的,可以保证其线程安全,但是shared_ptr指针并不是线程安全的。所以如果将shared_ptr reset为一个新的智能指针,那么可能会出现新指针指向旧的控制块,导致崩溃。 还有智能指针指向元素的线程安全性由对象自己控制。
usecount:表示智能指针指向的对象(其实说指向的内存更确当)的引用计数,即有多少个智能指针同时指向了它,指向同个对象的智能指针的usecount是一样的。 share_ptr没有release接口。 classA{public:A(inta):m_a(a){std::cout<<"contruct:"<<m_a<<endl;}~A(){std::cout<<"destruct:"<<m_a<<endl;}int...
1 定义std::shared_ptr变量的时候,同时初始化内容 2 通过std::shared_ptr的函数get取得原始对象的指针,然后输出信息 3 创建std::shared_ptr变量的时候,使用另一个std::shared_ptr类型来初始化 4 从输出结果看,新的对象std::shared_ptr输出的内容与复制过来的对象的内容一致 5 采用函数make_share来分配内存...