将'this'转换为std :: shared_ptr

Ale*_*der 9 c++ shared-ptr c++11

我在类上有一个方法,使特定实例成为"活动"实例:

void makeActive() { activeInstance = this; }
Run Code Online (Sandbox Code Playgroud)

但是,因为activeInstance有类型,它不起作用std::shared_ptr< ClassName >.我怎样才能投thisstd::shared_ptr<ClassName>

Dre*_*ann 22

如果您的对象已经由a 拥有shared_ptr,则可以shared_ptr通过让对象继承来生成另一个对象std::enable_shared_from_this

这段代码将起作用:

void makeActive() { activeInstance = shared_from_this(); }
Run Code Online (Sandbox Code Playgroud)

如果你的对象还没有被a 拥有shared_ptr,那么你确定不想创建一个,makeActive()因为shared_ptr当一个将破坏最后一个对象时,它会尝试删除你的对象.

  • 你说"当最后一个被销毁时,一个shared_ptr会尝试删除你的对象",但如果你在我的回答中解释你使用空删除器,则不是这样.说"你确定他不想创造一个"是一个过于强烈的声明,因为它可以安全地做到. (2认同)