如何将此的shared_ptr返回给拥有它的对象
How to return a shared_ptr of this to the object that owns it?
这里类似的问题似乎都使用了boost,我没有使用它。
我试图做的事情通过以下内容来证明:
在"所有者"中:
std::shared_ptr<State> m_state;
m_state = make_shared<State>(param);
m_state = m_state->SomeVirtualFunction(); // The original m_state object gets destroyed
在"拥有"中:
std::shared_ptr<State> State::SomeVirtualFunction() {
return std:shared_ptr<State>(this);
}
在MSVS 2012中的Visual C++中,所拥有的对象将被销毁。我怎样才能让它活着?
您需要从std::enable_shared_from_this
继承;请参阅"enable_shared_from_this"的作用是什么?。std::enable_shared_from_this
为您的类型配备了一个成员函数shared_from_this
,您可以调用该函数而不是std::shared_ptr<State>(this)
:
std::shared_ptr<State> State::SomeVirtualFunction() {
return shared_from_this();
}
在C++11(或Boost,C++11从中获得enable_shared_from_this
)之前,假设您有一个不提供enable_shared_from_this
的shared_ptr
实现,您可以手动为State
提供一个weak_ptr
,它可以在需要时转换为shared_ptr
:
class State {
...
std::weak_ptr<State> weak_self;
};
m_state = make_shared<State>(param);
m_state->weak_self = m_state;
std::shared_ptr<State> State::SomeVirtualFunction() {
return weak_self.lock()
}
State
应继承自std::enable_shared_from_this<State>
,State::SomeVirtualFunction()
应为
return shared_from_this();
请注意,您不能更改所有者中的代码。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 如何拥有两个名称相同但返回类型不同的纯虚拟方法
- 谁拥有QQMlinCubator返回的对象
- 拥有 std::map 的最佳方式,我可以在其中定义如果没有键时返回的内容
- 如何将此的shared_ptr返回给拥有它的对象
- Rdbuf(..)返回一个指针——谁拥有所指向的缓冲区
- 拥有typedef std::map<boost::<my_class>shared_ptr,my_description>如何从我的函数返回和shared_ptr?
- 有没有一种惯用的方法可以返回一个指针,该指针可以选择拥有其值