Wäre es nicht sauberer, nur eine zusätzliche Referenz zu nehmen, damit der Entscheider niemals aufgerufen wird? (Obwohl das immer noch nicht sehr sauber ist.)
Ich kann nicht sagen, dass es keine Funktion in Boost gibt, die den Job machen würde, aber es klingt nicht wie etwas, das sie aufnehmen möchten.
EDIT: die Kommentare gelesen und ein wenig Dokumentation, läuft es auf diese nach unten:
Referenz undicht. An einem bestimmten Punkt, führen Sie dies aus:
new shared_ptr(my_global_shared_ptr);
Vorteile: konzeptionell einfach. Nachteile: Sie verlieren etwas auf dem Haufen.
Benutzerdefinierte Freigabe. Da shared_ptr
wenig von der Deallocator-Funktion benötigt, würde eine anonyme Identitätsfunktion, wie sie in der anderen Antwort bereitgestellt wird, gut funktionieren.
Vorteile: Hebelwirkung Boost und hat absolut keinen Overhead. Nachteile: erfordert ein wenig Dokumentation.
Nicht statisches globales Objekt. Wenn es ein globales shared_ptr
für Ihr Objekt gibt, sollte das die einzige Möglichkeit sein, darauf zuzugreifen. Ersetzen Sie die Deklaration des Globalen durch shared_ptr
initialisiert durch new my_class
. Ich denke, das ist das Beste.
Wenn das Objekt nicht zerstört werden muss, warum steckst du es dann in ein shared_ptr? –
Sehr praktisch, wenn Sie überall mit intelligenten Zeigern über Bord gegangen sind und Sie eine Stapel- oder Elementvariable an eine Funktion übergeben möchten, die 'shared_ptr' erfordert. –
@Mark Ransom: Sie lassen mich an Codebasen denken, die mich zum Weinen bringen. : P –