2016-12-17 6 views
1

So intelligente Zeiger nichts anderes als Klassen sind, die einen Rohzeiger wickeln, nur das Objekt enthält eine destructor, dieC++ Smart Pointer

Anrufe löschen, wenn das genau ist, ist es aus irgendeinem Grund traditionelle rohe Zeiger zu benutzen? ist es immer bequemer, Smartpointer zu verwenden?

+2

Nun, manchmal brauchen Sie eine Variable, die * nicht * löscht, wenn sie den Gültigkeitsbereich verlässt. –

+2

Nun, Sie müssen natürlich rohe Zeiger verwenden, um intelligente Zeiger zu implementieren. –

Antwort

1

Smart Pointer haben einen gewissen Overhead. Wenn Sie die Funktionalität, die ein intelligenter Zeiger bietet, nicht benötigen (automatische Speicherverwaltung über RAII), dann bleiben Sie einfach bei der Verwendung von rohen Zeigern. Denken Sie daran, rohe Zeiger selbst sind nicht unbedingt schlecht, rohe Zeiger, die eigene Ressourcen haben. Ownership erfordert explizite delete -ion. Das wollen wir nicht.

+1

@Downvoter Kann ich einen Kommentar erhalten, warum? –

+1

std :: unique_ptr wurde speziell für einen Null-Overhead entwickelt. Zugegeben, das ist der einzige intelligente Zeiger mit dieser Eigenschaft. Aber intelligenter Zeiger-Overhead ist genau das, was Sie selbst schreiben müssten, um das Verhalten des intelligenten Zeigers zu haben. – rubenvb

+1

@rubenvb Doch die Standardinitialisierung eines 'unique_ptr' führt mehr als die Standardinitialisierung eines einfachen Pointers durch. – juanchopanza

2

Smartpointer sind eine Form der Ressourcenverwaltung. Es gibt andere, die geeigneter sind. Zum Beispiel ist für einen Nur-Speicher-Graph von Objekten (dh, keines der Objekte enthält eine Nicht-Speicher-Ressource irgendeiner Form) die Verwendung von Zuweisungen in eine Arena und das Loslassen der Arena effektiver: Sie hat einen viel kleineren Overhead und ist wesentlich schneller zu veröffentlichen, vor allem wenn die Objekte nicht unbedingt im Cache heiß sind. Die Objektgraphen, die in der Arena verwaltet werden, werden mit rohen Zeigern verknüpft.

Intelligente Zeiger sind eines von vielen Werkzeugen für das Ressourcenmanagement. Sie neigen dazu, von Menschen überstrapaziert zu werden, die andere Werkzeuge nicht kennen. Natürlich ist das ein übliches Muster: Für dich, der nur einen Hammer führt, sieht alles wie ein Nagel aus!

Verwandte Themen