SlideShare ist ein Scribd-Unternehmen logo
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

Weitere ähnliche Inhalte

PDF
System- & Konfigurationsmanagement mit Foreman & Puppet
PDF
SysDB – System DataBase — Ein Datenaggregator für System-Informationen
PDF
GE_: mein perlsProgrammssprache Unterricht Vol.IV
PDF
Upgrading Puppet CommitterConf Essen 2014
PDF
Addressroom
PDF
Systemmanagement mit Puppet und Foreman
PPTX
PyLucene@PyCon DE 2011
PDF
SLAC 2008 RPMs selber bauen
System- & Konfigurationsmanagement mit Foreman & Puppet
SysDB – System DataBase — Ein Datenaggregator für System-Informationen
GE_: mein perlsProgrammssprache Unterricht Vol.IV
Upgrading Puppet CommitterConf Essen 2014
Addressroom
Systemmanagement mit Puppet und Foreman
PyLucene@PyCon DE 2011
SLAC 2008 RPMs selber bauen

Andere mochten auch (14)

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

Ähnlich wie Boost C++ Libraries (20)

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

Mehr von Johannes Diemke (20)

PDF
Polymorphie
PDF
Prozedurale Texturen
PDF
Pfadplanung mit harmonischen Potentialfeldern
PDF
2010-JOGL-12-Projection-Shadows
PDF
2010-JOGL-11-Toon-Shading
PDF
2010-JOGL-10-Wavefront-OBJ
PDF
2010-JOGL-09-Texture-Mapping
PDF
2010-JOGL-08-Torus-Knoten
PDF
2010-JOGL-07-Hinweise-Uebungsblatt05
PDF
2010-JOGL-06-Licht-und-Material
PDF
2010-JOGL-05-Transformationen
PDF
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
PDF
2010-JOGL-02-Einfuehrung
PDF
2010-JOGL-01-Organisation
PDF
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
PDF
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
PDF
Software Produktlinien: Einführung und Überblick (Vortrag)
PDF
Theory Exploration (Ausarbeitung)
PDF
Theory Exploration (Vortrag)
PDF
Domainvergabe durch die DENIC (Vortrag)
Polymorphie
Prozedurale Texturen
Pfadplanung mit harmonischen Potentialfeldern
2010-JOGL-12-Projection-Shadows
2010-JOGL-11-Toon-Shading
2010-JOGL-10-Wavefront-OBJ
2010-JOGL-09-Texture-Mapping
2010-JOGL-08-Torus-Knoten
2010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-06-Licht-und-Material
2010-JOGL-05-Transformationen
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-02-Einfuehrung
2010-JOGL-01-Organisation
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Software Produktlinien: Einführung und Überblick (Vortrag)
Theory Exploration (Ausarbeitung)
Theory Exploration (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