我只是在研究即将推出的新 C++ 标准中的智能指针。但是我没有掌握 shared_from_this 函数的用法。这是我所拥有的:
#include <iostream>
#include <memory>
class CVerboseBornAndDie2 : public std::enable_shared_from_this<CVerboseBornAndDie2>
{
public:
std::string m_Name;
CVerboseBornAndDie2(std::string name) : m_Name(name)
{
std::cout << m_Name << " (" << this << ") is born!" << std::endl;
}
virtual ~CVerboseBornAndDie2()
{
std::cout << m_Name << " (" << this << ") is dying!" << std::endl;
}
};
int main(){
CVerboseBornAndDie2* vbad = new CVerboseBornAndDie2("foo");
std::shared_ptr<CVerboseBornAndDie2> p = vbad->shared_from_this();
}
并在行中抛出 std::bad_weak_ptr 异常
std::shared_ptr<CVerboseBornAndDie2> p = vbad->shared_from_this();
如果我改为这样做
std::shared_ptr<CVerboseBornAndDie2> p(vbad);
它有效,之后我可以做
std::shared_ptr<CVerboseBornAndDie2> p2 = p.get()->shared_from_this();
那么在我可以使用 shared_from_this 之前对象必须属于一个 shared_ptr 吗?但是我怎么能事先知道呢?
最佳答案
使用shared_from_this
的前提条件是必须存在至少一个拥有相关对象的shared_ptr
。这意味着您只能使用 shared_from_this
来检索拥有您具有引用或指针的对象的 shared_ptr
,您不能使用它来查明是否有这样的对象由 shared_ptr
所有。
您需要重新设计您的设计,以便确保任何此类对象都由 shared_ptr
管理,或者您永远不需要知道,或者最终(也是最不希望的)您创造一些其他方式来管理这些知识。
关于c++ - enable_shared_from_this(c++0x): what am I doing wrong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4428023/