2015-11-07 16 views
8

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

+2

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? –

+1

@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

+0

Die Antwort ist hier: http://StackOverflow.com/A/13460653/2183287 –

Antwort

7

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).