Ich benutze boost:shared_ptr
in meinem Code ausgiebig . Tatsächlich werden die meisten Objekte, die auf dem Heap zugeordnet sind, von a gehalten shared_ptr
. Leider bedeutet dies, dass ich nicht this
in eine Funktion übergehen kann, die eine übernimmt shared_ptr
. Betrachten Sie diesen Code:
void bar(boost::shared_ptr<Foo> pFoo)
{
...
}
void Foo::someFunction()
{
bar(this);
}
Hier gibt es zwei Probleme. Erstens wird dies nicht kompiliert, da der T * -Konstruktor für shared_ptr
explizit ist. Zweitens, wenn ich erzwinge, dass es mit erstellt bar(boost::shared_ptr<Foo>(this))
wird, habe ich einen zweiten gemeinsamen Zeiger auf mein Objekt erstellt, der schließlich zu einem doppelten Löschen führt.
Dies bringt mich zu meiner Frage: Gibt es ein Standardmuster zum Abrufen einer Kopie des vorhandenen gemeinsam genutzten Zeigers, von dem Sie wissen, dass er in einer Methode für eines dieser Objekte vorhanden ist? Ist die Verwendung von aufdringlichen Referenzzählungen hier meine einzige Option?