Hat eine unique_ptr
Instanz (ohne einen benutzerdefinierten Löschvorgang) denselben Speicherbedarf wie ein roher Zeiger oder speichert eine Instanz mehr als nur den Zeiger? Speicherbedarf von unique_ptr
Antwort
Wie @JoachimPileborg vorgeschlagen, mit GCC 4.8 (x64) dieser Code
std::cout << "sizeof(unique_ptr) = " << sizeof(std::unique_ptr<int>) << '\n';
erzeugt diese Ausgabe:
sizeof (unique_ptr) = 8
also unter dieser Implementierung, die Antwort ist ja.
Dies ist nicht verwunderlich, schließlich unique_ptr
nicht hinzufügen Funktionen-rohe Zeiger (zum Beispiel eines Zähler wie shared_ptr
in der Tat, wenn ich sizeof(shared_ptr<int>)
das Ergebnis dieses Mal 16
ist drucken.). unique_ptr
kümmert sich um einige Aspekte der Zeigerverwaltung.
Übrigens, ein unique_ptr
unterscheidet sich von einem rohen, der generierte Code wird anders sein, wenn Sie den einen oder anderen verwenden. Insbesondere, wenn ein unique_ptr
in Ihrem Code den Gültigkeitsbereich überschreitet, generiert der Compiler Code für den Destruktor dieser speziellen Spezialisierung, und verwendet diesen Code jedes Mal, wenn ein unique_ptr
dieses Typs zerstört wird (und das ist genau was du willst).
Das ist eine sehr implementationsspezifische Frage und kann daher zwischen verschiedenen Standardbibliotheken sehr unterschiedlich sein. Aber für eine einfache Überprüfung, warum nicht 'sizeof' verwenden, um einen rohen Zeiger zu prüfen und zu vergleichen? –
@JoachimPileborg Weil ich dachte, dass andere Leute in Zukunft dieselbe Frage haben könnten. Guter Punkt. Technisch hätte ich fragen sollen: "Ist es möglich *" unique_ptr "mit dem gleichen Speicherbedarf wie ein roher Pointer zu implementieren", so würden Implementierungen dies wahrscheinlich tun, wenn es möglich wäre. – Museful
Die Antwort ist hier: http://StackOverflow.com/A/13460653/2183287 –