Ich frage mich, ob intelligente Zeiger auf statische Objekte sinnvoll sind. Nehmen wir zum Beispiel an, dass ich eine statische Ressource habe und einen Verweis auf diese statische Ressource an einige andere Objekte weitergeben möchte, mit denen diese Ressource arbeiten soll.Sind shared_ptr auf statische Objekte gut?
Eine Möglichkeit wäre, die RAW-Pointer zu verwenden, die auf diese Ressource zeigen. Aber jetzt frage ich mich, ob intelligente Zeiger (shared_ptr) der bessere Weg sind und wenn ja, wie man es richtig macht. (Sollte der Smart Pointer auch statisch sein?).
Hintergrund der Frage: Wenn keine Objekte mehr einen Smart Pointer enthalten, würde das statische Objekt, auf das der Smart Pointer zeigt, freigegeben werden (was nicht die beste Idee ist ...).
Ein Beispiel (die am Ende der Laufzeit in einem Crash-Enden):
struct SomeType {
SomeType() { cout << "ctor..." << endl; }
~SomeType() { cout << "dtor..." << endl; }
void sayHello() { cout << "Hello!" << endl; }
};
void someFunction(shared_ptr<SomeType> smartPointer) {
smartPointer->sayHello();
}
static SomeType st;
static shared_ptr<SomeType> pt{ &st };
void anotherFunction() {
someFunction(pt);
}
int main() {
anotherFunction();
cin.get();
}
Es gibt hier überhaupt keine Notwendigkeit für shared_ptr. – SergeyA
Smart Pointer dienen zur besseren Verwaltung von * dynamischen * Lebensdauern. Statische Variablen haben bereits eine * statische * Lebensdauer. – jaggedSpire
"Eine Möglichkeit wäre, die RAW-Pointer zu verwenden, die auf diese Ressource zeigen" Es ist naheliegend, einen Verweis auf die Ressource zu verwenden. Warum willst du das nicht tun? –