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类的实例变量,只能作为基...
一、std::enable_shared_from_this的作用 按照enable_shared_from_this - C++ Reference (cplusplus.com)文档介绍:继承std::enable_shared_from_this的子类,可以使用shared_from_this成员函数获取自身的shared_ptr指针;该类提供了允许继承类的对象创建指向自身实例的shared_ptr,并且与存在shared_ptr对象共享所有权。什...
这就是std::enable_shared_from_this<T>发挥作用的地方。公开继承std::enable_shared_from_this的类可以通过调用方法shared_from_this()获得指向自己的shared_ptr。以下是它的一个基本示例: 代码语言:javascript 复制 #include<memory>struct Foo:std::enable_shared_from_this<Foo>{std::shared_ptr<Foo>getSelf...
引用计数增加;当std::shared_ptr对象被销毁或重置时,引用计数减少。
enable_shared_from_this的使用 为了保证不出现上面的情况,C++引入了enable_shared_from_this来解决这个问题(该方法是侵入式的,也可以手动保证只有构造第一个指向被持有对象的shared_ptr实例是由原始指针构造的),该方法将enable_shared_from_this<T>作为基类来继承(其中T为智能指针持有的类型),使得派生类拥有可以从th...
std::enable_shared_from_this 能让一个对象(假设其名为 t ,且已被一个 std::shared_ptr 对象 pt 管理)安全地生成其他额外的 std::shared_ptr 实例(假设名为 pt1, pt2, ... ) ,它们与 pt 共享对象 t 的所有权。 若一个类 T 继承 std::enable_shared_from_this<T> ,则会为该类 T 提供成员...
std::enable_shared_from_this 是一个类模板,用来返回指向当前对象的shared_ptr智能指针。在说明它的作用前我们可以看一下如下代码: demo.cpp #include <memory>#include <iostream>class A{public:A() { std::cout << "A()" << std::endl; }~A() { std::cout << "~A()" << std::endl; }...
在类的内部获取shared_ptr是在所难免的。 举个例子: 在日常c++编程中,为了更好的管理资源,我们通常借助shared_ptr来达到对资源的自动管理。由于其原理是通过过跟踪引用计数实现的,也就是说在使用了shared_ptr后就不能再使用裸指针this。比如说在类的内部直接使用std::shared_ptr<XX>(this),就会导致智能指针失效...
有些类的成员函数需要获得自身的std::shared_ptr,但不能就地从this创建,这样会导致多个毫无关系的智能指针引用到同一个对象,导致重复释放【不能传递share_ptr<this>,因为这样会造成2个以上非共享的share_ptr指向同一个对象,未增加引用计数导对象被析构两次】。
传递shared_ptr 指针时,如果临时以祼指针传递,容易造成共享关系的断裂,this 也是裸指针,所以,当需要在 class 内部,将 this 以 shared_ptr<T> 的方式传递时,你就需要 std::enabled_shared_from_this。 问题 这是boost里面举的一个例子:class Y: public...