该类没有重载*和->运算符,从这点看shared_ptr似乎无法实现普通指针的功能,推测这两个运算符的重载是在父类__shared_ptr实现的 该类没有析构函数,从智能指针最终会自动释放内存的特性来看,释放工作肯定不是在该类进行了,接下来分析父类__shared_ptr的实现 4.1.2、__shared_ptr __shared_ptr位于libstdc++-v3...
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 对象构造了一个可用...
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管理的对象是否已...
cout<<"obj use count is"<< obj.use_count() << endl;//1--尽管weak_ptr也指向obj,但他只是监听者,本身并不影响引用计数次数{//weak_ptr使用方法//外部至少还有一个shared_ptr来管理资源,同时p自己本身的资源 -- p.use_count >= 2auto p = weakObj.lock();//auto == ObjectPtrif(p) { cout...
这个版本的智能指针是我去看了本机上GNU C++标准库中shared_ptr源码后写的,在我的ubuntu22.04上,源码位置在 /usr/include/c++/12/bits/shared_ptr_base.h和/usr/include/c++/12/bits/shared_ptr.h下。GNU源码的…
shared_ptr 使用引用计数,每一个 shared_ptr 的拷贝都指向相同的内存。每引用它一次,内部的引用计数加1,每析构一次,内部的引用计数减1,减为0时,删除所指向的堆内存。shared_ptr内部的引用计数是安全的,但是对象的读取需要加锁。
weak_ptr 类 <memory_resource> <mutex> <new> <numeric> <optional> <ostream> <queue> <random> <ranges> <ratio> <regex> <scoped_allocator> <set> <shared_mutex> <sstream> <stack> <stdexcept> <streambuf> <string> <string_view> <strstream...
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...
在C++中,weak_ptr是一种智能指针,它指向一个由shared_ptr管理的对象,但不会增加对象的引用计数。weak_ptr主要用于解决shared_ptr的循环引用问题。当我们想要引用一个...
C++的智能指针是一种特殊的指针类型,它能够自动管理内存资源,避免常见的内存泄漏和多次释放等问题。C++11引入了三种主要的智能指针:unique_ptr、shared_ptr和weak_ptr。