Namensräume
Varianten

std::shared_ptr

Aus cppreference.com
< cpp‎ | memory
 
 
 
Dynamische Speicherverwaltung
Low-Level-Speicherverwaltung
Zuweiser
Original:
Allocators
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
allocator
allocator_traits(C++11)
allocator_arg_t(C++11)
allocator_arg(C++11)
uses_allocator(C++11)
scoped_allocator_adaptor(C++11)
Initialisierter Speicher
Original:
Uninitialized storage
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
uninitialized_copy
uninitialized_copy_n(C++11)
uninitialized_fill
uninitialized_fill_n
raw_storage_iterator
get_temporary_buffer
return_temporary_buffer
Intelligente Zeiger
Original:
Smart pointers
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
unique_ptr(C++11)
shared_ptr(C++11)
weak_ptr(C++11)
auto_ptr(veraltet)
owner_less(C++11)
enable_shared_from_this(C++11)
bad_weak_ptr(C++11)
default_delete(C++11)
Garbage Collection Unterstützung
Original:
Garbage collection support
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
declare_reachable(C++11)
undeclare_reachable(C++11)
declare_no_pointers(C++11)
undeclare_no_pointers(C++11)
pointer_safety(C++11)
get_pointer_safety(C++11)
Verschiedenes
Original:
Miscellaneous
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
pointer_traits(C++11)
addressof(C++11)
align(C++11)
C-Bibliothek
Original:
C Library
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
 
std::shared_ptr
Member-Funktionen
Original:
Member functions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
shared_ptr::shared_ptr
shared_ptr::~shared_ptr
shared_ptr::operator=
Modifiers
Original:
Modifiers
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
shared_ptr::reset
shared_ptr::swap
Beobachter
Original:
Observers
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
shared_ptr::get
shared_ptr::operator*
shared_ptr::operator->
shared_ptr::use_count
shared_ptr::unique
shared_ptr::operator bool
shared_ptr::owner_before
Non-Member-Funktionen
Original:
Non-member functions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
std::swap
make_shared
allocate_shared
static_pointer_cast
dynamic_pointer_cast
const_pointer_cast
get_deleter
operator==
operator|=
operator<
operator<=
operator>
operator>=
operator<<
atomic_is_lock_free
atomic_load
atomic_load_explicit
atomic_store
atomic_store_explicit
atomic_exchange
atomic_exchange_explicit
atomic_compare_exchange_weak
atomic_compare_exchange_strong
atomic_compare_exchange_weak_explicit
atomic_compare_exchange_strong_explicit
std::hash
 
definiert in Header <memory>
template<class T >class shared_ptr;
(seit C++11)

std::shared_ptr ist ein intelligenter Zeiger (smart pointer), der ein Objekt über einen Zeiger besitzt. Mehrere shared_ptr Instanzen können das selbe Objekt besitzen. Das Objekt wird zerstört, wenn eines der folgenden Ereignisse eintritt:

  • Der letzte shared_ptr, der das Objekt besitzt, wird zerstört.
  • Dem letzten shared_ptr, der das Objekt besitzt, wird ein neues Objekt mittles operator= oder reset() zugewiesen.

Das Objekt wird entweder mittels einer delete-expression oder einem benutzerdefiniertem deleter zerstört, der dem shared_ptr während der Erzeugung übergeben wird.

Ein shared_ptr kann den Besitz eines Objektes teilen, auch wenn ein anderes Objekt in ihm gespeichert ist. Das kann dazu benutzt werden, um Zeiger auf Member-Objekte zu speichern, während der shared_ptr das Objekt besitzt, zu dem das Member-Objekt gehört.

Ein shared_ptr kann auch kein Objekt besitzen, in diesem Fall wird er leer genannt.

Der shared_ptr erfüllt die Bedingungen für CopyConstructible und CopyAssignable.

Inhaltsverzeichnis

[Bearbeiten] Klassentypen

Typ Definition
element_typeT

[Bearbeiten] Methoden

erzeugt einen neuen shared_ptr
(öffentliche Elementfunktion)[edit]
zerstört das Objekt, das dem shared_ptr gehört, wenn keine anderen shared_ptr mehr auf das Objekt verweisen.
(öffentliche Elementfunktion)[edit]
Zuweisung eines shared_ptr
(öffentliche Elementfunktion)[edit]
modifizierend
ersetzt das verwaltete Objekt
Original:
replaces the managed object
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(öffentliche Elementfunktion)[edit]
tauscht die verwalteten Objekte aus
(öffentliche Elementfunktion)[edit]
informierend
liefert einen Zeiger auf das verwaltete Objekt
(öffentliche Elementfunktion)[edit]
dereferenziert den Zeiger auf das verwaltete Objekt
(öffentliche Elementfunktion)[edit]
gibt die Anzahl der shared_ptr-Objekte zurück, die auf dasselbe verwaltete Objekt verweisen
(öffentliche Elementfunktion)[edit]
prüft, ob das verwaltete Objekt nur durch die aktuelle shared_ptr Instanz verwaltet wird
(öffentliche Elementfunktion)[edit]
prüft, ob der shared_ptr mit einem verwalteten Objekt verknüpft ist
(öffentliche Elementfunktion)[edit]
erlaubt Sortierung der shared_ptr basierend auf dem Besitz
(öffentliche Elementfunktion)[edit]

[Bearbeiten] Assoziierte Funktionen

erzeugt einen shared_ptr, der ein neues Objekt verwaltet
(Funktions-Template)[edit]
erzeugt einen shared_ptr, der ein neues Objekt verwaltet, das mittels eines Allokators erzeugt wird.
(Funktions-Template)[edit]
führt ein static_cast, ein dynamic_cast oder ein const_cast auf den Typ des verwalteten Objekts durch
(Funktions-Template)[edit]
gibt einen Zeiger auf das Löschobjekt des verteilten Zeigers zurück, falls dieses eines besitzt.
(Funktions-Template)[edit]
vergleicht mit einem anderen shared_ptr oder mit nullptr
(Funktions-Template)[edit]
schreibt den Wert des verwalteten Zeigers in einen output stream
(Funktions-Template)[edit]
Spezialisierung des std::swap-Algorithmus für verteilte Zeiger
(Funktions-Template)[edit]
spezialisiert atomare Operationen für verteilte Zeiger
(Funktions-Template)[edit]

[Bearbeiten] Hilfsklassen

Hash-Unterstützung für std::shared_ptr
(class Template-Spezialisierung)[edit]

[Bearbeiten] Hinweise zur Implementierung

In einer typischen Implementierung hält ein std::shared_ptr nur zwei Zeiger:

  • einen Zeiger auf das referenzierte Objekt
  • einen Zeiger auf einen Steuerblock

wobei der Steuerblock ein dynamisch erzeugtes Objekt ist. Der Steuerblock enthält:

  • einen Zeiger auf das verwaltete Objekt oder das verwaltete Objekt selbst
  • den deleter
  • den allocator
  • die Anzahl der shared_ptr, die das verwaltete Objekt besitzen
  • die Anzahl der weak_ptr, die auf das verwaltete Objekt verweisen

Wenn ein shared_ptr mittels std::make_shared oder std::allocate_shared erzeugt wird enthält der Steuerblock das verwaltete Objekt selbst als eine member-Variable. Wenn ein shared_ptr durch Aufruf eines Konstruktors erzeugt wird, wird ein Zeiger im Steuerblock gespeichert.

Der Zeiger, der im shared_ptr direkt gespeichert ist, wird von get() zurückgegeben, während der Zeiger/das Objekt, das im Steuerblock gespeichert ist, dasjenige ist, welches gelöscht wird, wenn die Anzahl der gemeinsamen Besitzer Null erreicht. Die beiden Zeiger sind nicht notwendigerweise identisch.

Der Destruktor von shared_ptr verringert die Anzahl der gemeinsam Besitzer im Steuerblock. Wenn diese Anzahl Null erreicht, ruft der Steuerblock den Destruktor des verwalteten Objekts auf, löscht sich jedoch nicht selbst, bevor nicht die Anzahl der std::weak_ptr ebenfalls Null erreicht.

close