2010-10-06 12 views
5

Se voglio creare un unique_ptr di tipo QueueList (un po 'di oggetto definito dall'utente), come definisco un deletor per esso o esiste già un modello' Deletor 'che posso usare?boost unique_ptr Deletor

Desidero un unique_ptr così posso trasferire l'oggetto in modo sicuro tra i thread, senza condividerlo tra i thread.

EDIT

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

LIST mylist; 

Compiler: MS Visual Studio 2003

ERRORE:

errore C2976: 'boost :: :: interprocesso unique_ptr': troppo pochi argomenti di template errore

C2955: 'boost :: interprocess :: unique_ptr': l'uso del modello di classe richiede l'elenco degli argomenti del modello : vedere la dichiarazione di 'boost :: interprocess :: unique_ptr'

+0

Come si assegnano gli oggetti QueueList? Come dovrebbe essere cancellato? Considera di fornire un codice di esempio. – sellibitze

+1

Potremmo avere il nome/versione del compilatore e l'errore esatto? Non vedo nulla di sbagliato qui, a parte l'uso di tutte le protezioni per non-macro. –

risposta

9

Ecco una semplice classe di delezione che chiama semplicemente eliminare in un dato oggetto:

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

è possibile utilizzare con unique_ptr in questo modo:

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

Non è questo il delet predefinito? – Amnon

+1

Hmmm ... Sembra che boost non abbia un deleter predefinito. – Amnon