【发布时间】:2010-12-13 10:48:38
【问题描述】:
我只是在玩弄即将推出的新 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 吗?但是我怎么能事先知道呢?
【问题讨论】:
标签: c++ c++11 shared-ptr smart-pointers