2010-10-06 4 views
5

Wenn ich eine unique_ptr vom Typ QueueList (einige selbst definierte Objekte) erstellen möchte, wie definiere ich einen Deletor dafür oder gibt es bereits eine Vorlage 'Deletor', die ich verwenden kann?boost unique_ptr Deletor

Ich möchte ein unique_ptr, so dass ich das Objekt sicher zwischen Threads übertragen kann, ohne es zwischen den Threads zu teilen.

EDIT

boost::interprocess::unique_ptr<QueueList> LIST; ///FAILS to COMPILE!!! 

LIST mylist; 

Compiler: MS Visual Studio 2003

ERROR:

Fehler C2976: 'boost :: inter :: unique_ptr': zu wenig Template Argumente

Fehler C2955: 'boost :: interprocess :: unique_ptr': Verwendung der Klassenvorlage erfordert Template Argumentliste : siehe Deklaration von 'boost :: interprocess :: unique_ptr‘

+0

Wie ordnen Sie die QueueList Objekte? Wie soll es gelöscht werden? Erwäge, einen Beispielcode bereitzustellen. – sellibitze

+1

Könnten wir den Compiler-Namen/Version sowie den genauen Fehler haben? Ich sehe hier nichts falsches, abgesehen von der Verwendung aller Großbuchstaben für Nicht-Makros. –

Antwort

9

Hier ist ein einfaches deleter Klasse, die an einem bestimmten Objekt nur Anrufe löschen:

template<typename T> struct Deleter { 
    void operator()(T *p) 
    { 
     delete p; 
    } 
}; 

Sie können dann verwenden, mit unique_ptr wie folgt aus:

boost::interprocess::unique_ptr<QueueList, Deleter<QueueList> > LIST; 
+0

Ist dies nicht der Standardlöscher? – Amnon

+1

Hmmm ... Scheint wie Boost hat keine Standard-Deleter. – Amnon