std::weak_ptr与其绑定的std::shared_ptr 在上面的代码中,如果有其他地方持有std::shared_ptr<Child>,那么在Parent析构时,被该std::share_ptr<Child>持有的Child对象不会析构,而且Child::showParentName会正常识别出其Parent对象已经被析构。这就是std::weak_ptr能判断其绑定的std::shared_ptr管理的对象是否已...
shared_ptr<int> sp(new int); //weak_ptr<int> wp1; 构造了一个空 weak_ptr 对象 weak_ptr<int> wp1; //weak_ptr<int> wp2(wp1); 通过一个空 weak_ptr 对象构造了另一个空 weak_ptr 对象 weak_ptr<int> wp2(wp1); //weak_ptr<int> wp3(sp); 通过一个 shared_ptr 对象构造了一个可用...
};voidsharedPtrWithWeakPtr() { typedef std::shared_ptr<Object>ObjectPtr; typedef weak_ptr<Object>WeakObjectPtr; ObjectPtr obj(newObject(1));//一旦外部指向shared_ptr资源失效,那么weak_ptr管理的资源自动失效WeakObjectPtr weakObj2;//裸指针WeakObjectPtr weakObj(obj);//指向shared_ptr指针WeakObject...
其实weak_ptr本身设计的很简单,就是为了辅助shared_ptr的,它本身不能直接定义指向原始指针的对象,只能指向shared_ptr对象,同时也不能将weak_ptr对象直接赋值给shared_ptr类型的变量,最重要的一点是赋值给它不会增加引用计数: 基本用法 #inclu...
1. shared_ptr的实现 2. weak_ptr的实现 3. enable_shared_from_this的实现 这个版本的智能指针是我去看了本机上GNU C++标准库中shared_ptr源码后写的,在我的ubuntu22.04上,源码位置在/usr/include/c++/12/bits/shared_ptr_base.h和/usr/include/c++/12/bits/shared_ptr.h下。GNU源码的可读性并不那么好...
4.1.2、__shared_ptr __shared_ptr位于libstdc++-v3\include\bits\shared_ptr_base.h中 template<typename _Tp, _Lock_policy _Lp> class __shared_ptr { public: typedef _Tp element_type; ... // 构造函数 template<typename _Tp1> explicit __shared_ptr(_Tp1* __p) ...
使用 weak_ptr 访问对象时需要先将其转换为 shared_ptr,如果对象已被销毁,则转换为 shared_ptr 会...
2.unique_ptr 19:24 3.shared_ptr与weak_ptr 36:28 4.std::move 与 值类型 20:13 5.std::forward,引用折叠,万能引用 26:01 6.函数重载专题 18:46 7.关于const 21:58 8.const reference延续临时变量l 07:07 9.成员函数const重载的本质 04:10 10.函数传参之左值与右值 05:53 11.La...
通过shared_ptr 来创建,但不增加引用计数。当需要访问 weak_ptr 指向的对象时,可以通过 lock() 方法转换为 shared_ptr,如果转换成功,则可以安全地访问对象;如果转换失败,则表示对象已经被销毁。 下面是 weak_ptr 的简单示例: 结语 智能指针是 C++ 中管理动态内存的重要工具,它可以帮助我们更安全、更方便地管理内...