reset(new int(20)); // 清空ptr原本管理的对象,并管理新的对象 使用默认构造函数重置: cpp std::shared_ptr<int> ptr = std::make_shared<int>(10); ptr.reset(); // 等价于 ptr.reset(nullptr) 调用reset 方法后,std::shared_ptr 将不再管理之前的对象,如果之前的对象引用计数...
reset(); // 再次尝试使用资源 useResource(weakRes); return 0; } 扩展:与Java的比较与总结(因为Java也有弱引用) 共同点: std::weak_ptr 和WeakReference 都表示弱引用,引用的对象不影响垃圾回收或引用计数。 都提供方法来检测引用的对象是否仍然存在(C++ 使用 expired(),Java 使用 get() 返回null 检测)...
与另一个 shared_ptr 或nullptr 进行比较 (函数模板) operator<< 输出存储的指针的值到输出流 (函数模板) std::swap(std::shared_ptr) (C++11) 特化std::swap 算法 (函数模板) std::atomic_is_lock_free(std::shared_ptr)std::atomic_load(std::shared_ptr)std::atomic_load_explicit(std:...
unique_ptr可以不占用对象,即为空。可以通过reset()或者赋值nullptr释放管理对象。标准库早期版本中定了auto_ptr,它具有unique_ptr的部分特征,但不是全部。例如不能在容器中保存auto_ptr,不能从函数中返回auto_ptr等等,这也是unique_ptr主要的使用场景。 unique_ptr实现单例 #pragma once#include<mutex>#include<mem...
与另一个 shared_ptr 或nullptr 进行比较 (函数模板) operator<< 输出存储的指针的值到输出流 (函数模板) std::swap(std::shared_ptr) (C++11) 特化std::swap 算法 (函数模板) std::atomic_is_lock_free(std::shared_ptr)std::atomic_load(std::shared_ptr)std::atomic_load_explicit(std:...
reset(): 原来指向的对象的引用计数-1,然后自己变成null。 usecount:表示智能指针指向的对象(其实说指向的内存更确当)的引用计数,即有多少个智能指针同时指向了它,指向同个对象的智能指针的usecount是一样的。 share_ptr没有release接口。 classA{public:A(inta):m_a(a){std::cout<<"contruct:"<<m_a<<...
std::shared_ptr<int>p2 (nullptr); std::shared_ptr<int> p3 (newint); std::shared_ptr<int> p4 (newint, std::default_delete<int>()); std::shared_ptr<int> p5 (newint, [](int* p){delete p;}, std::allocator<int>()); ...
std::shared_ptr<string> p2 = std::make_shared<string>("hello");//auto关键字代替std::shared_ptr,p5指向一个动态分配的空vector<string>auto p5 = make_shared<vector<string>>(); 1.2 reset初始化 std::shared_ptr<int> pointer =nullptr; ...
reset(static_cast<int *>(nullptr)); CASE_EXPECT_TRUE(pi.use_count() == 1); 这里空指针 boost::shared_ptr 引用计数为0, std::shared_ptr 引用计数为1。我觉得0更符合直觉就按0处理了。 操作符的怪异行为 代码语言:javascript 代码运行次数:0 运行 AI代码解释 /// GCC: libstdc++ template<...
问std::shared_ptr: reset()与赋值EN使用reset()时,传递给reset的参数不必是托管对象(也不能是);...