SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
CARL
      VON
OSSIETZKY
            Boost C++ Libraries

            Johannes Diemke

            Department of Computer Science
            Learning and Cognitive Systems
Boost C++ Libraries


Grundlagen
   Freie von Experten begutachtete, portable C++ Bibliothek
   N¨tzlich, unabh¨ngig von speziellen Anwendungsgebieten
    u             a
   Strebt Referenzimplementierung an
   Neuer C++0x Standard wird verschiedene Boost Bibliotheken
   enthalten
   Funktioniert auf fast allen modernen Betriebssystemen
   Bekannte Linux und Unix Distributionen wie Fedora, Debian und
   NetBSD umfassen vor¨bersetzte Boost Packages
                       u




   Johannes Diemke              Boost               12. September 2011   2/18
Boost C++ Libraries


Wieso sollte man Boost nutzen?
   Produktivit¨t
              a
   Beschleunigt anf¨ngliche Entwicklung
                   a
   Weniger Bugs
   Verhindert es das Rad neu zu erfinden“
                 ”
   Langfristige Kosteneinsparungen bei der Wartung




   Johannes Diemke             Boost                 12. September 2011   3/18
Boost C++ Libraries


Die Boost Header Organisation
      Alle Boost Header haben die Endung .hpp
      Sie befinden sich in dem Verzeichnis boost/
      Daher sehen alle Boost #include Direktiven folgendermaßen aus:

                              Listing 1: Boost Header
1   #include <boost/whatever.hpp>
2
3   int main() {
4       // use boost
5       return 0;
6   }




      Johannes Diemke                Boost              12. September 2011   4/18
Boost C++ Libraries


Die Boost Header Organisation (Forts.)
   Organisation ist nicht v¨llig einheitlich:
                           o
          Einige ¨ltere und die meisten sehr kleinen Bibliotheken haben ihre
                 a
          Header direkt in boost/
          Die meisten Header der Bibliotheken sind jedoch in
          Unterverzeichnissen von boost/
               Bsp.: #include <boost/python/def.hpp>
          Einige Blibliotheken haben in boost/ aggregierte Header die alle
          Header einer Bibliothek einbinden
               Bsp.: #include <boost/python.hpp>




    Johannes Diemke                  Boost                  12. September 2011   5/18
Boost C++ Libraries


Header-Only Bibliotheken
   Die meisten Boost Bibliotheken sind Header-Only“
                                      ”
         Bestehen komplett aus Header Dateien
         Enthalten Templates und inline Funktionen
         Es m¨ssen keine seperat kompilierten Bibliotheken gelinkt werden
              u
   Es existieren einige Bibliotheken die seperat ubersetzt und gelinkt
                                                 ¨
   werden m¨ssen
             u
         Sollten diese ben¨tigt werden, so m¨ssen diese in die Makefiles vom
                          o                 u
         TORF Quellcode aufgenommen werden




   Johannes Diemke                  Boost                 12. September 2011   6/18
Boost C++ Libraries


 Ein Minimalbeispiel

                                  Listing 2: main.cpp
 1   #include <iostream>
 2   #include <boost/filesystem.hpp>
 3
 4   int main() {
 5       boost::filesystem::path path("/usr/include");
 6       bool result = boost::filesystem::is_directory(path);
 7
 8        std::cout << "Path is a directory : "
 9                  << std::boolalpha
10                  << result << std::endl;
11
12        return 0;
13   }




         Johannes Diemke                Boost                   12. September 2011   7/18
Boost C++ Libraries


Ein Minimalbeispiel (Forts.)
    Kompilieren und Linken f¨hrt zu unaufgel¨sten Abh¨ngigkeiten
                            u               o        a
       $ g++ main.cpp -o main
    Ben¨tigt die Bibliothek libboost_filesystem.a
       o

Einschub: Bibliotheken (static libraries)
    Sind Sammlungen von vorkompilierten Object-Dateien die in das
    Programm gelinkt werden k¨nnen
                             o
    Werden vom Linker ben¨tigt um Referenzen auf Funktionen
                         o
    aufzul¨sen
          o
    Befinden sich i. d. R. in /usr/lib und /lib



    Johannes Diemke             Boost               12. September 2011   8/18
Boost C++ Libraries


Ein Minimalbeispiel (Forts.)
    Referenzen k¨nnen ohne die externe Bibliothek
                o
    libboost_filesystem.a nicht aufgel¨st werden
                                         o
    Diese muss explizit gelinkt werden
        $ g++ main.cpp -lboost_filesystem -o main
    -lNAME versucht die Bibliothek libNAME.a aus den Standard
    Bibliotheksverzeichnissen zu linken
    die Executable enth¨lt anschließdend auch den Maschinencode f¨r
                       a                                         u
    die im Programm verwendeten Boost-Funktionen




    Johannes Diemke             Boost               12. September 2011   9/18
Boost C++ Libraries




   Johannes Diemke    Boost   12. September 2011   10/18
Boost C++ Libraries


Smart Pointer
   Verhalten sich wie normale Zeiger
   Geben jedoch referenzierte Objekte automatisch frei sobald sie nicht
   mehr ben¨tigt werden
            o
   Erleichtern Operationen mit dynamisch alloziertem Speicher
   Vermeidung von Memoryleaks und Fehlern die durch schlechtes
   Speichermanagement entstehen




   Johannes Diemke               Boost               12. September 2011   11/18
Boost C++ Libraries


Smart Pointer in Boost
   Boost besitzt sechs verschiedene Typen:
          scoped_ptr<T>
          scoped_array<T>
          shared_ptr<T>
          shared_array<T>
          weak_ptr<T>
          intrusive_ptr<T>
   Der Operator delete wird bei ihrer Nutzung nicht ben¨tigt
                                                       o




    Johannes Diemke             Boost              12. September 2011   12/18
Boost C++ Libraries


Ein Minimalbeispiel ohne Smart Pointer


                                 Listing 3: main.cpp
1   #include "CSample.h"
2
3   int main() {
4
5        CSample *pSample = new CSample();
6        pSample->compute();
7
8        delete pSample;
9   }




        Johannes Diemke                Boost           12. September 2011   13/18
Boost C++ Libraries


Der Boost scoped_ptr<T>
        garantiert automatisches L¨schen wenn der Zeiger den
                                    o
        G¨ltigkeitsbereich verl¨sst
         u                     a
        der Operator -> ist uberladen und greift auf das gekapselte Objekt
                            ¨
        zu
                                 Listing 4: main.cpp
1   #include <boost/scoped_ptr.hpp>
2   #include "CSample.h"
3
4   int main() {
5
6        boost::scoped_ptr<CSample> pSample(new CSample);
7        pSample->compute();
8
9   }


        Johannes Diemke                Boost                12. September 2011   14/18
Boost C++ Libraries


Der Boost scoped_ptr<T> (Forts.)
      Eignet sich besonders f¨r die automatische Freigabe von lokalen
                             u
      Objekten
      Performanz wie bei normalen Zeigern

Problem
      Mehrere Zeiger auf das gleiche Objekt sind nicht m¨glich
                                                        o

                        Listing 5: Restriktionen bei scoped_ptr<T>
1   scoped_ptr<CSample> pA(new CSample);
2   scoped_ptr<CSample> pB = pA;   // Compiler-Fehler: nicht erlaubt
3   pA = new CSample;              // Compiler-Fehler: nicht kompatibel




      Johannes Diemke                    Boost                12. September 2011   15/18
Boost C++ Libraries


Der Boost scoped_ptr<T> (Forts.)
      Folgendes ist aber m¨glich:
                          o

                                Listing 6: main.cpp
1   T* scoped_ptr<T>::get()      // gibt den enthaltenen Zeiger zur¨ck
                                                                    u
2      scoped_ptr<T>::reset(T *) // ersetzt den enthaltenen Zeiger mit
3                                // einer neuen Instanz. Die vorige
4                                // Instanz wird dabei freigegeben




      Johannes Diemke                 Boost                 12. September 2011   16/18
Boost C++ Libraries


Der Boost shared_ptr<T>
   Erm¨glicht es mehrere Smart Pointer auf das gleiche Objekt zeigen
       o
   zu lassen
   Ist ein referenzgez¨hlter Zeiger der uberwacht wieviele Zeiger auf ein
                      a                 ¨
   Objekt verweisen

Problem
   Keine zirkul¨ren Referenzen m¨glich
               a                o




   Johannes Diemke               Boost                12. September 2011   17/18
Boost C++ Libraries


 Der Boost shared_ptr<T> (Forts.)
                                  Listing 7: main.cpp
 1   #include <iostream>
 2   #include <boost/shared_ptr.hpp>
 3   #include "CSample.h"
 4
 5   int main() {
 6
 7        boost::shared_ptr<CSample> p1(new CSample());
 8        std::cout << "use count: " << p1.use_count() << std::endl;
 9
10        boost::shared_ptr<CSample> p2 = p1;
11        std::cout << "use count: " << p1.use_count() << std::endl;
12
13        p1.reset();
14        std::cout << "use count: " << p2.use_count() << std::endl;
15   }



         Johannes Diemke                Boost                 12. September 2011   18/18

Contenu connexe

En vedette

Let's Take A Look At The Boost Libraries
Let's Take A Look At The Boost LibrariesLet's Take A Look At The Boost Libraries
Let's Take A Look At The Boost LibrariesThomas Pollak
 
Дмитрий Копляров , Потокобезопасные сигналы в C++
Дмитрий Копляров , Потокобезопасные сигналы в C++Дмитрий Копляров , Потокобезопасные сигналы в C++
Дмитрий Копляров , Потокобезопасные сигналы в C++Sergey Platonov
 
Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++
Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++
Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++Sergey Platonov
 
The normal distribution
The normal distributionThe normal distribution
The normal distributionShakeel Nouman
 
Илья Шишков, Принципы создания тестируемого кода
Илья Шишков, Принципы создания тестируемого кодаИлья Шишков, Принципы создания тестируемого кода
Илья Шишков, Принципы создания тестируемого кодаSergey Platonov
 
XPath for web scraping
XPath for web scrapingXPath for web scraping
XPath for web scrapingScrapinghub
 
An Introduction to Part of C++ STL
An Introduction to Part of C++ STLAn Introduction to Part of C++ STL
An Introduction to Part of C++ STL乐群 陈
 
Фитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в формеФитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в формеIlia Shishkov
 
Search Presentation
Search  PresentationSearch  Presentation
Search PresentationDoug Green
 
Big Data - 25 Amazing Facts Everyone Should Know
Big Data - 25 Amazing Facts Everyone Should KnowBig Data - 25 Amazing Facts Everyone Should Know
Big Data - 25 Amazing Facts Everyone Should KnowBernard Marr
 

En vedette (14)

Let's Take A Look At The Boost Libraries
Let's Take A Look At The Boost LibrariesLet's Take A Look At The Boost Libraries
Let's Take A Look At The Boost Libraries
 
Дмитрий Копляров , Потокобезопасные сигналы в C++
Дмитрий Копляров , Потокобезопасные сигналы в C++Дмитрий Копляров , Потокобезопасные сигналы в C++
Дмитрий Копляров , Потокобезопасные сигналы в C++
 
Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++
Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++
Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++
 
The normal distribution
The normal distributionThe normal distribution
The normal distribution
 
Илья Шишков, Принципы создания тестируемого кода
Илья Шишков, Принципы создания тестируемого кодаИлья Шишков, Принципы создания тестируемого кода
Илья Шишков, Принципы создания тестируемого кода
 
XPath for web scraping
XPath for web scrapingXPath for web scraping
XPath for web scraping
 
An Introduction to Part of C++ STL
An Introduction to Part of C++ STLAn Introduction to Part of C++ STL
An Introduction to Part of C++ STL
 
Фитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в формеФитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в форме
 
Search Presentation
Search  PresentationSearch  Presentation
Search Presentation
 
OpenCV Introduction
OpenCV IntroductionOpenCV Introduction
OpenCV Introduction
 
STL in C++
STL in C++STL in C++
STL in C++
 
Fortran 90 Basics
Fortran 90 BasicsFortran 90 Basics
Fortran 90 Basics
 
3689[1].pdf
3689[1].pdf3689[1].pdf
3689[1].pdf
 
Big Data - 25 Amazing Facts Everyone Should Know
Big Data - 25 Amazing Facts Everyone Should KnowBig Data - 25 Amazing Facts Everyone Should Know
Big Data - 25 Amazing Facts Everyone Should Know
 

Similaire à Boost C++ Libraries

Automation with Ansible
Automation with AnsibleAutomation with Ansible
Automation with AnsibleSusannSgorzaly
 
Dart (Teil II der Tour de Dart)
Dart (Teil II der Tour de Dart)Dart (Teil II der Tour de Dart)
Dart (Teil II der Tour de Dart)Nane Kratzke
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauenjohofer
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code CookbookUlrich Krause
 
Compact, Compress, De-DUplicate
Compact, Compress, De-DUplicateCompact, Compress, De-DUplicate
Compact, Compress, De-DUplicateUlrich Krause
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondUlrich Krause
 
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG KonferenzDomino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenzpanagenda
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
Suche und PyLucene
Suche und PyLuceneSuche und PyLucene
Suche und PyLuceneThomas Koch
 
ICS UserGroup - 2015 - Eclipse and Notes - Love/Hate Relationships
ICS UserGroup - 2015 - Eclipse and Notes - Love/Hate RelationshipsICS UserGroup - 2015 - Eclipse and Notes - Love/Hate Relationships
ICS UserGroup - 2015 - Eclipse and Notes - Love/Hate RelationshipsChristoph Adler
 
Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...
Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...
Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...OPITZ CONSULTING Deutschland
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0Patrick Charrier
 
Extbase/Fluid: Kennenlernen und ausprobieren
Extbase/Fluid: Kennenlernen und ausprobierenExtbase/Fluid: Kennenlernen und ausprobieren
Extbase/Fluid: Kennenlernen und ausprobierenSpeedPartner GmbH
 
Icsug conf 14_adm06honyishrunkthedata
Icsug conf 14_adm06honyishrunkthedataIcsug conf 14_adm06honyishrunkthedata
Icsug conf 14_adm06honyishrunkthedataICS User Group
 
OSMC 2008 | Nagios Hochverfügbar mit hearbeat V2 by Jan Dennis Bungart
OSMC 2008 | Nagios Hochverfügbar mit hearbeat V2 by Jan Dennis BungartOSMC 2008 | Nagios Hochverfügbar mit hearbeat V2 by Jan Dennis Bungart
OSMC 2008 | Nagios Hochverfügbar mit hearbeat V2 by Jan Dennis BungartNETWAYS
 
AdminCamp2010, Closing General Session
AdminCamp2010, Closing General SessionAdminCamp2010, Closing General Session
AdminCamp2010, Closing General SessionUlrich Krause
 
B3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite ApplicationsB3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite ApplicationsAndreas Schulte
 

Similaire à Boost C++ Libraries (20)

C++ kompakt
C++ kompaktC++ kompakt
C++ kompakt
 
Web Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 BetaWeb Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 Beta
 
Automation with Ansible
Automation with AnsibleAutomation with Ansible
Automation with Ansible
 
Dart (Teil II der Tour de Dart)
Dart (Teil II der Tour de Dart)Dart (Teil II der Tour de Dart)
Dart (Teil II der Tour de Dart)
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code Cookbook
 
Compact, Compress, De-DUplicate
Compact, Compress, De-DUplicateCompact, Compress, De-DUplicate
Compact, Compress, De-DUplicate
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
 
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG KonferenzDomino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Suche und PyLucene
Suche und PyLuceneSuche und PyLucene
Suche und PyLucene
 
ICS UserGroup - 2015 - Eclipse and Notes - Love/Hate Relationships
ICS UserGroup - 2015 - Eclipse and Notes - Love/Hate RelationshipsICS UserGroup - 2015 - Eclipse and Notes - Love/Hate Relationships
ICS UserGroup - 2015 - Eclipse and Notes - Love/Hate Relationships
 
Daos
DaosDaos
Daos
 
Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...
Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...
Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0
 
Extbase/Fluid: Kennenlernen und ausprobieren
Extbase/Fluid: Kennenlernen und ausprobierenExtbase/Fluid: Kennenlernen und ausprobieren
Extbase/Fluid: Kennenlernen und ausprobieren
 
Icsug conf 14_adm06honyishrunkthedata
Icsug conf 14_adm06honyishrunkthedataIcsug conf 14_adm06honyishrunkthedata
Icsug conf 14_adm06honyishrunkthedata
 
OSMC 2008 | Nagios Hochverfügbar mit hearbeat V2 by Jan Dennis Bungart
OSMC 2008 | Nagios Hochverfügbar mit hearbeat V2 by Jan Dennis BungartOSMC 2008 | Nagios Hochverfügbar mit hearbeat V2 by Jan Dennis Bungart
OSMC 2008 | Nagios Hochverfügbar mit hearbeat V2 by Jan Dennis Bungart
 
AdminCamp2010, Closing General Session
AdminCamp2010, Closing General SessionAdminCamp2010, Closing General Session
AdminCamp2010, Closing General Session
 
B3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite ApplicationsB3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite Applications
 

Plus de Johannes Diemke

Pfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen PotentialfeldernPfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen PotentialfeldernJohannes Diemke
 
2010-JOGL-12-Projection-Shadows
2010-JOGL-12-Projection-Shadows2010-JOGL-12-Projection-Shadows
2010-JOGL-12-Projection-ShadowsJohannes Diemke
 
2010-JOGL-11-Toon-Shading
2010-JOGL-11-Toon-Shading2010-JOGL-11-Toon-Shading
2010-JOGL-11-Toon-ShadingJohannes Diemke
 
2010-JOGL-10-Wavefront-OBJ
2010-JOGL-10-Wavefront-OBJ2010-JOGL-10-Wavefront-OBJ
2010-JOGL-10-Wavefront-OBJJohannes Diemke
 
2010-JOGL-09-Texture-Mapping
2010-JOGL-09-Texture-Mapping2010-JOGL-09-Texture-Mapping
2010-JOGL-09-Texture-MappingJohannes Diemke
 
2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-KnotenJohannes Diemke
 
2010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt052010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt05Johannes Diemke
 
2010-JOGL-06-Licht-und-Material
2010-JOGL-06-Licht-und-Material2010-JOGL-06-Licht-und-Material
2010-JOGL-06-Licht-und-MaterialJohannes Diemke
 
2010-JOGL-05-Transformationen
2010-JOGL-05-Transformationen2010-JOGL-05-Transformationen
2010-JOGL-05-TransformationenJohannes Diemke
 
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-RemovalJohannes Diemke
 
2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung2010-JOGL-02-Einfuehrung
2010-JOGL-02-EinfuehrungJohannes Diemke
 
2010-JOGL-01-Organisation
2010-JOGL-01-Organisation2010-JOGL-01-Organisation
2010-JOGL-01-OrganisationJohannes Diemke
 
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)Johannes Diemke
 
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)Johannes Diemke
 
Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Johannes Diemke
 
Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Johannes Diemke
 
Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Johannes Diemke
 
Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Johannes Diemke
 

Plus de Johannes Diemke (20)

Polymorphie
PolymorphiePolymorphie
Polymorphie
 
Prozedurale Texturen
Prozedurale TexturenProzedurale Texturen
Prozedurale Texturen
 
Pfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen PotentialfeldernPfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen Potentialfeldern
 
2010-JOGL-12-Projection-Shadows
2010-JOGL-12-Projection-Shadows2010-JOGL-12-Projection-Shadows
2010-JOGL-12-Projection-Shadows
 
2010-JOGL-11-Toon-Shading
2010-JOGL-11-Toon-Shading2010-JOGL-11-Toon-Shading
2010-JOGL-11-Toon-Shading
 
2010-JOGL-10-Wavefront-OBJ
2010-JOGL-10-Wavefront-OBJ2010-JOGL-10-Wavefront-OBJ
2010-JOGL-10-Wavefront-OBJ
 
2010-JOGL-09-Texture-Mapping
2010-JOGL-09-Texture-Mapping2010-JOGL-09-Texture-Mapping
2010-JOGL-09-Texture-Mapping
 
2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten
 
2010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt052010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt05
 
2010-JOGL-06-Licht-und-Material
2010-JOGL-06-Licht-und-Material2010-JOGL-06-Licht-und-Material
2010-JOGL-06-Licht-und-Material
 
2010-JOGL-05-Transformationen
2010-JOGL-05-Transformationen2010-JOGL-05-Transformationen
2010-JOGL-05-Transformationen
 
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
 
2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung
 
2010-JOGL-01-Organisation
2010-JOGL-01-Organisation2010-JOGL-01-Organisation
2010-JOGL-01-Organisation
 
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
 
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
 
Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)
 
Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)
 
Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Theory Exploration (Vortrag)
Theory Exploration (Vortrag)
 
Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)
 

Boost C++ Libraries

  • 1. CARL VON OSSIETZKY Boost C++ Libraries Johannes Diemke Department of Computer Science Learning and Cognitive Systems
  • 2. Boost C++ Libraries Grundlagen Freie von Experten begutachtete, portable C++ Bibliothek N¨tzlich, unabh¨ngig von speziellen Anwendungsgebieten u a Strebt Referenzimplementierung an Neuer C++0x Standard wird verschiedene Boost Bibliotheken enthalten Funktioniert auf fast allen modernen Betriebssystemen Bekannte Linux und Unix Distributionen wie Fedora, Debian und NetBSD umfassen vor¨bersetzte Boost Packages u Johannes Diemke Boost 12. September 2011 2/18
  • 3. Boost C++ Libraries Wieso sollte man Boost nutzen? Produktivit¨t a Beschleunigt anf¨ngliche Entwicklung a Weniger Bugs Verhindert es das Rad neu zu erfinden“ ” Langfristige Kosteneinsparungen bei der Wartung Johannes Diemke Boost 12. September 2011 3/18
  • 4. Boost C++ Libraries Die Boost Header Organisation Alle Boost Header haben die Endung .hpp Sie befinden sich in dem Verzeichnis boost/ Daher sehen alle Boost #include Direktiven folgendermaßen aus: Listing 1: Boost Header 1 #include <boost/whatever.hpp> 2 3 int main() { 4 // use boost 5 return 0; 6 } Johannes Diemke Boost 12. September 2011 4/18
  • 5. Boost C++ Libraries Die Boost Header Organisation (Forts.) Organisation ist nicht v¨llig einheitlich: o Einige ¨ltere und die meisten sehr kleinen Bibliotheken haben ihre a Header direkt in boost/ Die meisten Header der Bibliotheken sind jedoch in Unterverzeichnissen von boost/ Bsp.: #include <boost/python/def.hpp> Einige Blibliotheken haben in boost/ aggregierte Header die alle Header einer Bibliothek einbinden Bsp.: #include <boost/python.hpp> Johannes Diemke Boost 12. September 2011 5/18
  • 6. Boost C++ Libraries Header-Only Bibliotheken Die meisten Boost Bibliotheken sind Header-Only“ ” Bestehen komplett aus Header Dateien Enthalten Templates und inline Funktionen Es m¨ssen keine seperat kompilierten Bibliotheken gelinkt werden u Es existieren einige Bibliotheken die seperat ubersetzt und gelinkt ¨ werden m¨ssen u Sollten diese ben¨tigt werden, so m¨ssen diese in die Makefiles vom o u TORF Quellcode aufgenommen werden Johannes Diemke Boost 12. September 2011 6/18
  • 7. Boost C++ Libraries Ein Minimalbeispiel Listing 2: main.cpp 1 #include <iostream> 2 #include <boost/filesystem.hpp> 3 4 int main() { 5 boost::filesystem::path path("/usr/include"); 6 bool result = boost::filesystem::is_directory(path); 7 8 std::cout << "Path is a directory : " 9 << std::boolalpha 10 << result << std::endl; 11 12 return 0; 13 } Johannes Diemke Boost 12. September 2011 7/18
  • 8. Boost C++ Libraries Ein Minimalbeispiel (Forts.) Kompilieren und Linken f¨hrt zu unaufgel¨sten Abh¨ngigkeiten u o a $ g++ main.cpp -o main Ben¨tigt die Bibliothek libboost_filesystem.a o Einschub: Bibliotheken (static libraries) Sind Sammlungen von vorkompilierten Object-Dateien die in das Programm gelinkt werden k¨nnen o Werden vom Linker ben¨tigt um Referenzen auf Funktionen o aufzul¨sen o Befinden sich i. d. R. in /usr/lib und /lib Johannes Diemke Boost 12. September 2011 8/18
  • 9. Boost C++ Libraries Ein Minimalbeispiel (Forts.) Referenzen k¨nnen ohne die externe Bibliothek o libboost_filesystem.a nicht aufgel¨st werden o Diese muss explizit gelinkt werden $ g++ main.cpp -lboost_filesystem -o main -lNAME versucht die Bibliothek libNAME.a aus den Standard Bibliotheksverzeichnissen zu linken die Executable enth¨lt anschließdend auch den Maschinencode f¨r a u die im Programm verwendeten Boost-Funktionen Johannes Diemke Boost 12. September 2011 9/18
  • 10. Boost C++ Libraries Johannes Diemke Boost 12. September 2011 10/18
  • 11. Boost C++ Libraries Smart Pointer Verhalten sich wie normale Zeiger Geben jedoch referenzierte Objekte automatisch frei sobald sie nicht mehr ben¨tigt werden o Erleichtern Operationen mit dynamisch alloziertem Speicher Vermeidung von Memoryleaks und Fehlern die durch schlechtes Speichermanagement entstehen Johannes Diemke Boost 12. September 2011 11/18
  • 12. Boost C++ Libraries Smart Pointer in Boost Boost besitzt sechs verschiedene Typen: scoped_ptr<T> scoped_array<T> shared_ptr<T> shared_array<T> weak_ptr<T> intrusive_ptr<T> Der Operator delete wird bei ihrer Nutzung nicht ben¨tigt o Johannes Diemke Boost 12. September 2011 12/18
  • 13. Boost C++ Libraries Ein Minimalbeispiel ohne Smart Pointer Listing 3: main.cpp 1 #include "CSample.h" 2 3 int main() { 4 5 CSample *pSample = new CSample(); 6 pSample->compute(); 7 8 delete pSample; 9 } Johannes Diemke Boost 12. September 2011 13/18
  • 14. Boost C++ Libraries Der Boost scoped_ptr<T> garantiert automatisches L¨schen wenn der Zeiger den o G¨ltigkeitsbereich verl¨sst u a der Operator -> ist uberladen und greift auf das gekapselte Objekt ¨ zu Listing 4: main.cpp 1 #include <boost/scoped_ptr.hpp> 2 #include "CSample.h" 3 4 int main() { 5 6 boost::scoped_ptr<CSample> pSample(new CSample); 7 pSample->compute(); 8 9 } Johannes Diemke Boost 12. September 2011 14/18
  • 15. Boost C++ Libraries Der Boost scoped_ptr<T> (Forts.) Eignet sich besonders f¨r die automatische Freigabe von lokalen u Objekten Performanz wie bei normalen Zeigern Problem Mehrere Zeiger auf das gleiche Objekt sind nicht m¨glich o Listing 5: Restriktionen bei scoped_ptr<T> 1 scoped_ptr<CSample> pA(new CSample); 2 scoped_ptr<CSample> pB = pA; // Compiler-Fehler: nicht erlaubt 3 pA = new CSample; // Compiler-Fehler: nicht kompatibel Johannes Diemke Boost 12. September 2011 15/18
  • 16. Boost C++ Libraries Der Boost scoped_ptr<T> (Forts.) Folgendes ist aber m¨glich: o Listing 6: main.cpp 1 T* scoped_ptr<T>::get() // gibt den enthaltenen Zeiger zur¨ck u 2 scoped_ptr<T>::reset(T *) // ersetzt den enthaltenen Zeiger mit 3 // einer neuen Instanz. Die vorige 4 // Instanz wird dabei freigegeben Johannes Diemke Boost 12. September 2011 16/18
  • 17. Boost C++ Libraries Der Boost shared_ptr<T> Erm¨glicht es mehrere Smart Pointer auf das gleiche Objekt zeigen o zu lassen Ist ein referenzgez¨hlter Zeiger der uberwacht wieviele Zeiger auf ein a ¨ Objekt verweisen Problem Keine zirkul¨ren Referenzen m¨glich a o Johannes Diemke Boost 12. September 2011 17/18
  • 18. Boost C++ Libraries Der Boost shared_ptr<T> (Forts.) Listing 7: main.cpp 1 #include <iostream> 2 #include <boost/shared_ptr.hpp> 3 #include "CSample.h" 4 5 int main() { 6 7 boost::shared_ptr<CSample> p1(new CSample()); 8 std::cout << "use count: " << p1.use_count() << std::endl; 9 10 boost::shared_ptr<CSample> p2 = p1; 11 std::cout << "use count: " << p1.use_count() << std::endl; 12 13 p1.reset(); 14 std::cout << "use count: " << p2.use_count() << std::endl; 15 } Johannes Diemke Boost 12. September 2011 18/18