Boost C++ Libraries

749 Aufrufe

Veröffentlicht am

0 Kommentare
3 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
749
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
2
Aktionen
Geteilt
0
Downloads
5
Kommentare
0
Gefällt mir
3
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Boost C++ Libraries

  1. 1. CARL VONOSSIETZKY Boost C++ Libraries Johannes Diemke Department of Computer Science Learning and Cognitive Systems
  2. 2. Boost C++ LibrariesGrundlagen 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. 3. Boost C++ LibrariesWieso 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. 4. Boost C++ LibrariesDie 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 Header1 #include <boost/whatever.hpp>23 int main() {4 // use boost5 return 0;6 } Johannes Diemke Boost 12. September 2011 4/18
  5. 5. Boost C++ LibrariesDie 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. 6. Boost C++ LibrariesHeader-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. 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::boolalpha10 << result << std::endl;1112 return 0;13 } Johannes Diemke Boost 12. September 2011 7/18
  8. 8. Boost C++ LibrariesEin 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 oEinschub: 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. 9. Boost C++ LibrariesEin 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. 10. Boost C++ Libraries Johannes Diemke Boost 12. September 2011 10/18
  11. 11. Boost C++ LibrariesSmart 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. 12. Boost C++ LibrariesSmart 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. 13. Boost C++ LibrariesEin Minimalbeispiel ohne Smart Pointer Listing 3: main.cpp1 #include "CSample.h"23 int main() {45 CSample *pSample = new CSample();6 pSample->compute();78 delete pSample;9 } Johannes Diemke Boost 12. September 2011 13/18
  14. 14. Boost C++ LibrariesDer 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.cpp1 #include <boost/scoped_ptr.hpp>2 #include "CSample.h"34 int main() {56 boost::scoped_ptr<CSample> pSample(new CSample);7 pSample->compute();89 } Johannes Diemke Boost 12. September 2011 14/18
  15. 15. Boost C++ LibrariesDer Boost scoped_ptr<T> (Forts.) Eignet sich besonders f¨r die automatische Freigabe von lokalen u Objekten Performanz wie bei normalen ZeigernProblem 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 erlaubt3 pA = new CSample; // Compiler-Fehler: nicht kompatibel Johannes Diemke Boost 12. September 2011 15/18
  16. 16. Boost C++ LibrariesDer Boost scoped_ptr<T> (Forts.) Folgendes ist aber m¨glich: o Listing 6: main.cpp1 T* scoped_ptr<T>::get() // gibt den enthaltenen Zeiger zur¨ck u2 scoped_ptr<T>::reset(T *) // ersetzt den enthaltenen Zeiger mit3 // einer neuen Instanz. Die vorige4 // Instanz wird dabei freigegeben Johannes Diemke Boost 12. September 2011 16/18
  17. 17. Boost C++ LibrariesDer 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 verweisenProblem Keine zirkul¨ren Referenzen m¨glich a o Johannes Diemke Boost 12. September 2011 17/18
  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; 910 boost::shared_ptr<CSample> p2 = p1;11 std::cout << "use count: " << p1.use_count() << std::endl;1213 p1.reset();14 std::cout << "use count: " << p2.use_count() << std::endl;15 } Johannes Diemke Boost 12. September 2011 18/18

×