因为make_shared只申请一次内存,因此控制块和数据块在一起,只有当控制块中不再使用时,内存才会释放,但是weak_ptr却使得控制块一直在使用。 缺点 构造函数是保护或私有时,无法使用 make_shared make_shared虽好, 但也存在一些问题, 比如,当我想要创建的对象没有公有的构造函数时,make_shared就无法使用了,当然我们...
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源码的可读性并不那么好...
说了这么多,那么std::weak_ptr除了解决相互引用的问题,还能做什么?答案是:一切应该不具有对象所有权,又想安全访问对象的情况。 还是以互相引用的情况为例,通常的场景是:一个公司类可以拥有员工,那么这些员工就使用std::shared_ptr维护。另外有时候我们希望员工也能找到他的公司,所以也是用std::shared_ptr维护,这个...
voidrunGame(){std::shared_ptr<Monster>monster1(newMonster());//计数加到1do{std::shared_ptr<Monster> monster2 = monster1;//计数加到2}while(0);//该栈退出后,计数减为1,monster1指向的堆对象仍存在std::shared_ptr<Monster> monster3 = monster1;//计数加到2}//该栈退出后,shared_ptr都释放...
make_shared<Controller>(4), };// Each controller depends on all others not being deleted.// Give each controller a pointer to all the others.for(inti =0; i < v.size(); ++i) { for_each(v.begin(), v.end(), [&v, i](shared_ptr<Controller> p) {if(p->Num != i) ...
std::unique_ptr 是一种独占的语义,即只允许一个智能指针引用裸指针,这区别于 std::shared_ptr 允许多个 shared_ptr 引用同一个裸指针,它没有引用计数,它的性能比 shared_ptr 会高一点。
shared_ptr<int> sp1(p);// 通过普通指针p构造shared_ptr shared_ptr<int> sp2 = sp1;// 复制,sp2也指向p shared_ptr<int> sp3 = make_shared<int>(2);// 通过make_shared构造,make_shared内部调用了new int(2); sp3.reset(new int(3));// 通过reset重置内部数据指针 ...
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.Lambda表达式的本质 10:21...
以下是使用std::weak_ptr改进上述代码的示例: #include<memory>classB;// Forward declarationclassA{public:std::shared_ptr<B>b_ptr;};classB{public:std::weak_ptr<A>a_ptr;// Using weak_ptr here};intmain(){std::shared_ptr<A>a=std::make_shared<A>();std::shared_ptr<B>b=std::make_...
operator=() 把 shared_ptr或者weak_ptr赋值给weak_ptr expired() 判断它指的资源是否过期 lock() 返回shared_ptr,如果资源已经过期,返回空的shared_ptr reset() 将当前weak_ptr指针置为空 swap() 交换 intmain(){shared_ptr<AA>pa=make_shared<AA>("测试AA");{shared_ptr<BB>pb=make_shared<BB>("测...