 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Torsten Mohr Guest
|
Posted: Sat May 13, 2006 11:34 am Post subject: smart_ptr |
|
|
Hi,
in einem C++-Buch hab ich einige Beispiele über smart_ptr
gelesen. In den Beispielen wurde die Klasse smart_ptr aber
jeweils neu geschrieben. Ich hatte das auch so verstanden
daß man die Klasse smart_ptr jeweils spezifisch auf ein
Problem anpassen muss.
Es gibt aber in der STL eine allgemeine Klasse smart_ptr,
könnt ihr mir zu der ein paar Anwendungsbeispiele geben?
Vielen Dank für Tipps,
Torsten.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Christoph Kliemt Guest
|
Posted: Sun May 14, 2006 3:50 pm Post subject: Re: smart_ptr |
|
|
Torsten Mohr <tmohr (AT) s (DOT) netic.de> writes:
| Quote: | in einem C++-Buch hab ich einige Beispiele ueber smart_ptr gelesen.
In den Beispielen wurde die Klasse smart_ptr aber jeweils neu
geschrieben. Ich hatte das auch so verstanden dass man die Klasse
smart_ptr jeweils spezifisch auf ein Problem anpassen muss.
|
Kommt auf den aktuellen smart_ptr an.
| Quote: | Es gibt aber in der STL eine allgemeine Klasse smart_ptr, koennt ihr
mir zu der ein paar Anwendungsbeispiele geben?
|
Schau dir mal
http://boost.org/libs/smart_ptr/smart_ptr.htm
an. boost.org ist sowieso einen Blick wert:
We aim to establish "existing practice" and provide reference
implementations so that Boost libraries are suitable for eventual
standardization. Ten Boost libraries are already included in the C++
Standards Committee's Library Technical Report ( TR1) as a step
toward becoming part of a future C++ Standard. More Boost libraries
are proposed for the upcoming TR2.
hth,
Christoph
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Sun May 14, 2006 4:21 pm Post subject: Re: smart_ptr |
|
|
Torsten Mohr wrote:
| Quote: | Hi,
in einem C++-Buch hab ich einige Beispiele über smart_ptr
gelesen. In den Beispielen wurde die Klasse smart_ptr aber
jeweils neu geschrieben. Ich hatte das auch so verstanden
daß man die Klasse smart_ptr jeweils spezifisch auf ein
Problem anpassen muss.
|
Naja, "smart_ptr" ist auch kein besonder guter Name, da ein "smart pointer"
ein eher allgemeines Konzept ist. Es gibt verschiedene Arten von smart
pointers, z.B. std::auto_ptr oder einen "shared pointer".
| Quote: | Es gibt aber in der STL eine allgemeine Klasse smart_ptr,
könnt ihr mir zu der ein paar Anwendungsbeispiele geben?
|
Ob es sowas in der STL gibt, weiß ich nicht. In der Standarbibliothek gibt's
aber so eine Klasse nicht.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
kanze Guest
|
Posted: Mon May 15, 2006 2:22 pm Post subject: Re: smart_ptr |
|
|
Torsten Mohr wrote:
| Quote: | in einem C++-Buch hab ich einige Beispiele über smart_ptr
gelesen. In den Beispielen wurde die Klasse smart_ptr aber
jeweils neu geschrieben. Ich hatte das auch so verstanden
daß man die Klasse smart_ptr jeweils spezifisch auf ein
Problem anpassen muss.
|
Es kommt darauf an. Smart_ptr heißt kluger Zeiger; es gibt davon
viele, viele Arte, je nach dem welches Problem man erledigen
will. Und man muss wohl die Klasse für jede neue Art neu
schreiben.
Dagegen gibt es wohl ein Paar Benutzungen, die recht häufig
vorkomment; die Zeiger dafür werden wohl einmal geschrieben, und
dann überall eingesetzt. Typischerweise wäre also auto_ptr oder
die smart_ptr von Boost.
| Quote: | Es gibt aber in der STL eine allgemeine Klasse smart_ptr,
könnt ihr mir zu der ein paar Anwendungsbeispiele geben?
|
Der einzige kluge Zeiger in der standard-Bibliothek ist
std::auto_ptr. Er hat eine etwas besondere Semantik, worin beim
Zuweisen auch den Zeiger auf der rechten Seite geändert wird.
Ich benutze ihn hauptsächlich in der Kommunikation zwischen
Threads, also:
template< typename T >
class MessageQueue
{
public:
void send( std::auto_ptr< T > message ) ;
std::auto_ptr< T > receive() ;
private:
// ...
} ;
Bei der Benutzung:
std::auto_ptr< Message >
m( new Message ) ;
// Message ausfühlen...
queue.send( m ) ;
// Und hier steht mir den Message nicht mehr zur
// Verfügung... m.get() == NULL.
Seine Benutzung ist nicht immer aber sehr einfach, weil er in
den Containern nicht vorkommen darf. Also zum Beispiel benutze
ich eine std::deque<T*> in der Implementierung von MessageQueue,
und muss in send:
myData.push_back( message.get() ) ;
message.release() ;
benutzen, statt einfach den message direkt in die Queue zu
kopieren.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|