2010-10-06 18 views
5

Jeśli chcę utworzyć unique_ptr typu QueueList (jakiś obiekt zdefiniowany samodzielnie), jak zdefiniować dla niego deletor lub czy istnieje już szablon "Deletor", którego mogę użyć?boost unique_ptr Deletor

Chcę unique_ptr, więc mogę bezpiecznie przenieść obiekt między wątkami, bez dzielenia go między wątkami.

EDIT

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

LIST mylist; 

Compiler: MS Visual Studio 2003

BŁĄD:

error C2976: 'Boost :: interprocess :: unique_ptr': zbyt mało argumentów szablonu

błąd C2955: 'boost :: interprocess :: unique_ptr': użycie szablonu klasy wymaga listy argumentów szablonu : zobacz deklarację 'boost :: interprocess' :: unique_ptr”

+0

W jaki sposób można przydzielić obiektów QueueList? Jak to ma usunąć eb? Rozważ podanie przykładowego kodu. – sellibitze

+1

Czy możemy podać nazwę/wersję kompilatora, a także dokładny błąd? Nie widzę tutaj niczego złego, poza używaniem wielkich liter dla nie-makro. –

Odpowiedz

9

Oto prosty klasa Deleter że po prostu wywołuje usuwać na danym obiekcie:

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

można następnie wykorzystać ją unique_ptr tak:

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

Czy to nie jest domyślny deleter? – Amnon

+1

Hmmm ... Wygląda na to, że boost nie ma domyślnego deltera. – Amnon