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).
- 1. Speicherbedarf von Haskell-Datentypen
- 2. Kafka Speicherbedarf
- 3. vector von unique_ptr löschen?
- 4. RDD Speicherbedarf in Funken
- 5. Mehrere .NET-Prozesse Speicherbedarf
- 6. Neuzuweisen von unique_ptr von int
- 7. Vererbung und dynamic_cast von unique_ptr
- 8. Speicherverlust trotz Verwendung von unique_ptr
- 9. Alternativen von static_pointer_cast für unique_ptr
- 10. Empfohlene Verwendung von std :: unique_ptr
- 11. Speicherbedarf eines ungenutzten zuweisbaren Array
- 12. minimieren Tomcat "pro Verbindung" Speicherbedarf
- 13. Cocoa Touch: Zugriffsmethode + Speicherbedarf Erläuterung
- 14. Zuweisen der abgeleiteten Klasse unique_ptr zur Basisklasse unique_ptr
- 15. C++ unique_ptr Konstantenreferenz
- 16. unique_ptr und Forward-Deklaration
- 17. Thread sicher unique_ptr move
- 18. Dereferenzieren einer temporären unique_ptr
- 19. unique_ptr Besitz Semantik
- 20. C++ unique_ptr und Arrays
- 21. unique_ptr VS auto_ptr
- 22. boost unique_ptr Deletor
- 23. Verschiebe Semantik mit unique_ptr
- 24. Verwenden von std :: unique_ptr für Windows-GRUNDE
- 25. verschieben Besitz von std :: shared_ptr std :: unique_ptr
- 26. Verwenden von unique_ptr zum Steuern eines Dateideskriptors
- 27. eine std :: unordered_set von std :: unique_ptr
- 28. Iterate rohe Zeiger von unique_ptr in Kartenwerte
- 29. Wie verhindere ich den Speicherverlust von unique_ptr
- 30. Liste von unique_ptr, für eine abgeleitete Vorlagenklasse
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 –