enable_shared_from_this (c++0x): was mache ich falsch?

Ich bin nur spielte, um mit den smart-Pointer in der kommenden neuen c++ - standard. Aber ich kann das nicht begreifen, wird die Nutzung der shared_from_this Funktion. Hier ist, was ich habe:

#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();
}

und es wirft eine std::bad_weak_ptr Ausnahme in der Linie

std::shared_ptr<CVerboseBornAndDie2> p = vbad->shared_from_this();

wenn ich stattdessen tun

std::shared_ptr<CVerboseBornAndDie2> p(vbad);

funktioniert es und ich kann Sie danach tun

std::shared_ptr<CVerboseBornAndDie2> p2 = p.get()->shared_from_this();

so muss das Objekt gehört zu einem shared_ptr, bevor ich Sie verwenden kann shared_from_this? Aber Woher weiß ich das vorher?

InformationsquelleAutor fschmitt | 2010-12-13
Schreibe einen Kommentar