Was ist ein nackter Zeiger?

8

Beobachten Naked Pointers (siehe die erste Antwort), die Fragen sind ziemlich einfach:

Was ist ein nackter Zeiger?

    
LivingThing 15.02.2012, 18:57
quelle

4 Antworten

10

Hier ist ein einfaches Beispiel:

%Vor%

np ist ein Zeiger auf ein Objekt vom Typ X - Wenn Sie dieses Objekt dynamisch zugewiesen haben ( new / malloc ), müssen Sie delete / free it ... einfacher Zeiger wie np heißt "nackter Zeiger" .

sp ist ein Objekt, das einen Zeiger auf die verwaltete Ressource enthält, was bedeutet, dass Sie es genau so verwenden können, wie Sie np verwenden würden, aber wenn es keine shared_ptr -Objekte gibt, die diese Ressource besitzen, ist die Ressource befreit, so dass du delete es nicht haben musst. Smartpointer kümmern sich um die Speicherverwaltung, also müssen Sie nicht;)

    
LihO 15.02.2012, 19:21
quelle
12

Ein "nackter Zeiger" ist ein "einfacher" Zeiger, d. h. die Sache, die der Standard und was auch immer Buch über C ++ - Aufrufzeiger ist. Es ist das übliche " T * " (wobei T der Typ ist, auf den der Zeiger zeigt).

Die "nackte" Terminologie stieß auf intelligente Zeiger, die sich in vielerlei Hinsicht als Zeiger verhalten (normalerweise überlasten sie die Operatoren * , -> und in einigen anderen) Fälle [] ).

Intelligente Zeiger sind "schlau", weil sie eine Semantik der Eigentumsrechte spezifizieren und durchsetzen und die "Dummheit" von nackten Zeigern entfernen: in Fakten spezifizieren nackte Zeiger nicht / wissen ob sie das Objekt besitzen / besitzen beziehen sich auf (z. B. wenn es freigegeben werden muss, wenn der Zeiger den Gültigkeitsbereich verlässt) und selbst wenn mit einer Namenskonvention bekannt ist, dass ein Zeiger das Objekt besitzt, wenn er darauf zeigt, wird dies nicht durch die Sprache erzwungen Der Zeiger verlässt den Gültigkeitsbereich und niemand hat das spitze Objekt manuell freigegeben (normalerweise tritt dies auf, wenn eine Ausnahme ausgelöst wird). Sie haben einen Speicherverlust.

Intelligente Zeiger verwenden stattdessen die Garantien des Typsystems von C ++ (Kopierkonstruktor, Zuweisungsoperator, garantierte Aufrufe zum Destruktor, ...), um eine Art von Besitz zu etablieren und durchzusetzen (typischerweise: streng und nicht übertragbar, streng aber kann auf einen anderen intelligenten Zeiger übertragen werden, der zwischen mehreren intelligenten Zeigern geteilt wird.)

... es gibt eine Menge Diskussionen über intelligente Zeiger in StackOverflow und im Internet. Ich bin mir ziemlich sicher, dass Sie ausführlichere Diskussionen über intelligente Zeiger und warum nackte Zeiger verwenden werden, die sie besitzen Objekte sind normalerweise ein schlechtes Ding TM in einem modernen C ++ Programm.

    
Matteo Italia 15.02.2012 19:08
quelle
8

Ein nackter Zeiger (roher Zeiger, "dummer" Zeiger) ist ein C-artiger Zeiger T* . Vergleichen Sie dies mit den "intelligenten" Zeigern, die C ++ anbietet ( std::shared_ptr<T> , std::weak_ptr<T> und std::unique_ptr<T> ).

    
fredoverflow 15.02.2012 19:05
quelle
4

Intelligente Zeiger sind in C ++ der bevorzugte Weg, da sie eine bessere Speicherverwaltung bieten. Intelligente Zeiger haben zusätzliche Informationen (zählen die Anzahl der Referenzen, aktuelles Eigentum usw. usw.) zusammen mit der Adresse des Objekts, auf das sie zeigen, und daher enthalten der Name Smart-Zeiger und Naked-Zeiger keine solche zusätzliche Information und somit den Namen Nackter Zeiger Daher löschen sie das Objekt nicht mehr, nachdem es nicht mehr verwendet wird, da es nicht über die erforderlichen Informationen verfügt. Ich hoffe, es hilft uns, in unseren Gedanken zu bleiben.

    
Nirmit Dalal 26.04.2014 21:45
quelle

Tags und Links