Am Mittwoch, dem 27. März 2002 um 20:52:53, schrieb Stephan Goetter:
Am Mittwoch 27 März 2002 11:56 schrieb Torsten Werner:
void funktion() { boost::scoped_ptr<FILE> a(fopen("datei"), fclose); // irgendwas mit a anfangen: fprintf(a, "Hallo Welt!\n"); ... }
*Hüstel* - obiges Beispiel funktioniert 'nur' mit shared_ptr und nicht mit scoped_ptr und fopen() hat 2 Argumente, sorry... Folgendes ist getestet:
#include "boost/shared_ptr.hpp" #include <cstdio> int main() { boost::shared_ptr<FILE> dat(fopen("/etc/hosts", "r"), fclose); char line[256]; fgets(line, sizeof(line), dat.get()); puts(line); return 0; }
Zu leiden der Übersichtlichkeit, wie ich finde, und mit einem klitzekleinen Overhead.
Wieso leidet in meinem Beispiel die Übersichtlichkeit? Spätestens wenn Ausnahmen ausgelöst werden oder ein vorzeitiges return benutzt wird, ist obige Lösung eleganter als explizites Aufrufen von fclose(). Mit dem Overhead verstehe ich auch nicht. Das shared_ptr-Template benutzt keine Vererbung und kann von einem guten Compiler komplett 'ge-inline-d' werden, oder?
Torsten