Besonderheiten des std::shared_ptr

Nachdem ich im letzten Artikel das große Bild zu std::shared_ptr beschrieben habe, komme ich heute zu zwei besonderen Aspekten der Smart Pointer. Zum einen zeige ich mit std::shared_from_this, wie sich ein std::shared_ptr von einem Objekt erzeugen lässt, zum anderen beschäftigt mich die Frage: Soll ein std::shared_ptr per Copy oder per Referenz übergeben werden. Insbesondere der zweite Punkt besitzt einiges an Überraschungspotential.

Weiterlesen...
Gelesen: 19738

std::shared_ptr

std::shared_ptr teilen sich eine gemeinsame Ressource. Dabei zählt der gemeinsame Referenzzähler mit, wie viele Besitzer die Ressource hat. Wird der Smart Pointer std::shared_ptr kopiert, erhöht sich automatisch der Referenzzähler. Beim Löschen eines std::shared_prt wird sein Referenzzähler hingegen automatisch erniedrigt. Erreicht der Referenzzähler den Wert 0, wird die Ressource freigegeben.

Weiterlesen...
Gelesen: 22653

std::unique_ptr

Ein std::unique_ptr verwaltet exklusiv den Lebenszyklus seiner Ressource nach dem RAII-Idiom. Er ist die erste Wahl für einen Smart Pointer, da er seine Arbeit in der Regel ohne Speicher- oder Performanz-Overhead vollzieht.

Weiterlesen...
Gelesen: 31780

Speicher und Performanz Overhead von Smart Pointern

C++ bietet vier verschiedene Smart Pointer an. Zwei davon will ich mir in diesem Artikel unter dem Aspekt Overhead in puncto Speicher und Performanz genauer anschauen. Während mein erster Kandidat std::unique_ptr den Lebenszyklus genau einer Ressource verwaltet, teilt sich mein zweiter Kandidat std::shared_ptr typischerweise seine Ressource mit anderen std::shared_ptr. Ich nehme das Ergebnis meines Tests gerne vorweg, bevor die nackten Zahlen kommen. Es gibt wenige Gründe in modernem C++, das Speichermanagment mit new und delete explizit in die Hand zu nehmen. 

Weiterlesen...
Gelesen: 16828

Sorgfältiger Umgang mit Ressourcen

Der sorgfältige Umgang mit Ressourcen, sei es Speicher, Dateien oder Sockets, ist zentral für die Programmierung in C++. Das gilt insbesondere für die embedded Programmierung, da sich diese gerne durch eingeschränkte Ressourcen auszeichnet. Daher will ich mich diesem vielschichtigen und anspruchsvollen Thema in mehreren Artikeln widmen.

Weiterlesen...
Gelesen: 10157

Acquire-Release-Semantik - Der typische Fehler

Eine release-Operation synchronizes-with einer acquire-Operation auf der gleichen atomaren Variable. Damit lassen sich Threads einfach synchronisieren, wenn ... . Auf dieses wenn will ich tiefer eingehen.

Weiterlesen...
Gelesen: 12187

Erweiterte Plain Old Data

Plain Old Data (PODs) folgen dem C-Standardlayout. Damit können sie direkt mit den performanten C-Funktionen memcopy oder memmove kopiert, mit memset initialisiert oder auch mit memcmp verglichen werden.

Weiterlesen...
Gelesen: 10194

Buckets, Kapazität und Ladefaktor

Die Hashfunktion bildet die potentiell unendliche Anzahl von Schlüssel auf eine endliche Anzahl von Buckets ab. Welche Strategie dabei die C++-Laufzeit verfolgt und wie diese angepasst werden kann, zeigt dieser Artikel.

Weiterlesen...
Gelesen: 11336

Hashfunktionen

Der entscheidende Grund für die konstante Zugriffszeit der ungeordneten assoziativen Container sind deren Hashfunktionen. In bekannter Manier bietet C++ viele Stellschrauben für Hashfunktionen an. Einerseits bringt C++ einen reichen Satz an Hashfunktionen mit, andererseits lassen sich auch eigene Hashfunktionen verwenden. Selbst die Verteilung der Hashwerte auf die Buckets kann angepasst werden.

Weiterlesen...
Gelesen: 14870

Mentoring

Stay Informed about my Mentoring

 

Rezensionen

Tutorial

Besucher

Heute 995

Gestern 1427

Woche 4998

Monat 20940

Insgesamt 3319852

Aktuell sind 46 Gäste und keine Mitglieder online

Kubik-Rubik Joomla! Extensions

Abonniere den Newsletter (+ pdf Päckchen)

Beiträge-Archiv

Sourcecode

Neuste Kommentare