Я просто играю с умными указателями в новом стандарте 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_ptr, прежде чем я смогу использовать shared_from_this? Но как я могу знать это заранее?