enable_shared_from_this (c ++ 0x): что я делаю не так?

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

9
задан fschmitt 13 December 2010 в 10:48
поделиться