Open Source im professionellen Einsatz
Linux-Magazin 05/2010
351

Type Traits

Sind reguläre Ausdrücke für den Anwendungsprogrammierer ein hilfreiches Werkzeug, so ist es die Type-Traits-Bibliothek für den Designer von generischen Bibliotheken in C++0x. Mit »type_traits« erhält C++0x eine Bibliothek, die das Template Metaprogramming in C++ hoffähig macht. Diese Metasprache der Templates hilft C++-Code zur Compilezeit zu erzeugen, der zur Laufzeit ausführbereit vorliegt. Das bedeutet einen deutlichen Performancegewinn für das Programm, denn die Metasprache erlaubt mächtige Optimierungen des resultierenden C++-Code.

Die »type_traits«-Bibliothek stellt die Bausteine für das Template Metaprogramming bereit: die Abfrage von Typen, deren Vergleich und auch Modifikation. Danny Kalev, ehemaliges Mitglied der C++-Standard-Komitees, stellt diese ebenso anspruchsvolle wie innovative Technik in seinem Artikel vor [9]. Der Autor entwickelt einen Kopieralgorithmus für Container, der seine Elemente performant mit der C-Funktion »memcpy()« kopiert, sofern die Container und deren Elemente die notwendigen Bedingungen erfüllen.

Bewährtes verbessert

Nach den vorgestellten Neuerungen bieten die folgenden Bibliotheken bereits aus C++ bekannte Konzepte in überarbeiteter und generischer Form an. Den Anfang machen die Smart Pointer, die in C++-Kreisen als eine wichtige, wenn nicht gar die wichtigste Erweiterung gelten, die die C++0x-Bibliothek mit sich bringt. Smart Pointer sind spezielle intelligente Zeiger, die als Wrapper Aufrufe vollkommen transparent an die eingepackte Ressource weiterreichen und diese außerdem mit zusätzlicher Funktionalität ausstatten. C++0x bietet sie in drei Formen an, als »shared_ptr«, »weak_ptr« und »unique_ptr«:

  • Der »shared_ptr« verwendet einen
    Referenzzähler auf eine gemeinsam genutzte Ressource. Jeder
    neue Shared Pointer auf die geteilte Ressource inkrementiert, jeder
    gelöschte dekrementiert den Referenzzähler. Sobald dieser
    0 erreicht, wird die Ressource automatisch freigegeben.
  • Der »weak_ptr« hilft zyklische Referenzen beim
    Einsatz von Shared Pointers aufzulösen. Ein Weak Pointer
    verändert den Referenzzähler auf die geteilte Ressource
    nicht.
  • Der »unique_ptr« besitzt eine Ressource exklusiv.
    Er lässt sich nicht kopieren.

Abbildung 2: Während der alte Auto Pointer in C++ seine Ressource an den erzeugten Pointer übergibt, hält der neue Shared Pointer eine Referenz auf seine Ressource und eine auf den Referenzzähler.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • C++11

    Der Smart Pointer gilt als der klügste seiner Art in C++11. Sein Fachgebiet ist die elegante Garbage Collection, manchmal muss aber sein kleiner Bruder Weak Pointer mithelfen.

  • C++11

    Die neuen Smart Pointer in C++11 machen den Zugriff auf Ressourcen transparent und räumen hinter sich auf. Dieser Artikel stellt als ersten Vertreter den Unique Pointer vor.

  • C++11

    Klein, aber oho: Platziert ein Entwickler drei Punkte ("…") geschickt an der richtigen Stelle im C++-Code, entpacken die so genannten Variadic Templates ihre Argumente an Ort und Stelle.

  • C++11

    2014 ist ein besonderes Jahr für C++. Drei Jahre nach C++11 erfährt der Sprachstandard mit C++14 den letzten Feinschliff. Neben generischen Lambda-Funktionen und der vereinfachten Ermittlung des Rückgabetyps kann C++14 vor allem mit einem Feature punkten: Reader-Writer-Locks.

  • C++11

    Die Referenz-Wrapper bilden eine kleine, aber feine neue Bibliothek in C++11. Diese Objekte verhalten sich wie Referenzen, der Artikel erklärt die Details.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.