首先肯定不能像上面代码清单2那样写return shared_ptr<A> (this),这会调用shared_ptr智能指针的构造函数,对this指针指向的对象,又建立了一份引用计数对象,加上main函数中的shared_ptr<A> ptr1(new A());已经对这个A对象建立的引用计数对象,又成了两个引用计数对象,对同一个资源都记录了引用计数,为1,最终两...
enable_shared_from_this类中使用了一个私有weak_ptr来保存地址,在shared_from_this()通过把这个weak_ptr转换为引用计数为1的shared_ptr返回,避免了临时shared_ptr析构导致this被delete。
继承enable_shared_from_this 的基类,通过shared_from_this()返回shared_ptr指针, 对指针复制操作不会造成内存二次释放 不继承这个基类, 通过shared_ptr<Simple2>(this);返回shared_ptr指针,复制指针会导致内存的二次释放。 示例代码如下: #include<iostream>#include<memory>#include<utility>#include<fmt/core.h>...
std::enable_shared_from_this是模板类,内部有个_Tp类型weak_ptr指针,调用shared_from_this成员函数便可获取到_Tp类型智能指针,从这里可以看出,_Tp类型就是我们的目标类型。再来看看std::enable_shared_from_this的构造函数都是protected,因此不能直接创建std::enable_from_shared_from_this类的实例变量,只能作为基...
1 enable_shared_from_this如何使用 代码语言:javascript 复制 classMyCar:publicstd::enable_shared_from_this<MyCar>{public:shared_ptr<MyCar>get_ptr(){returnshared_from_this();}~MyCar(){std::cout<<"free ~Mycar()"<<std::endl;}private:};intmain(){MyCar*_myCar=newMyCar();shared_ptr<...
{return*this; }~enable_shared_from_this() BOOST_NOEXCEPT//~weak_ptr<T> newer throws, so this call also must not throw{ }public:shared_ptr<T>shared_from_this() { shared_ptr<T>p( weak_this_ ); BOOST_ASSERT( p.get() ==this);returnp; ...
生成shared_ptr。复制 shared_ptr<Ty> shared_from_this(); shared_ptr<const Ty> shared_from_this() const; 备注成员函数均返回自己的 *(Ty*)this的对象。shared_ptr 类示例复制 // std_tr1__memory__shared_from_this.cpp // compile with: /EHsc #include <memory> #include <iostream> struct ...
enable_shared_from_this的使用 为了保证不出现上面的情况,C++引入了enable_shared_from_this来解决这个...
enable_shared_from_this其实是智能指针中的内容,它的作用就是用于在类的内部,返回一个this的智能指针。 enable_shared_from_this介绍 enable_shared_from_this其实是智能指针中的内容,它的作用就是用于在类的内部,返回一个this的智能指针。 对于enable_shared_from_this,初学者可能不明白它的使用场景和使用的必要性...
std::enable_shared_from_this是以奇异递归模板(CRTP)实现的一个模板类。在日常开发中,我们可以继承 ...