2013-04-26 2 views
14

Posso inizializzare shared_ptr con il valore NULL?Inizializza boost :: shared_ptr su NULL

boost::shared_ptr<Type> s_obj(NULL); 

Se no, allora come?

+8

Non è quello che costruisce di default? –

+2

anche nullptr ha più senso di NULL se C++ 11 – paulm

+1

Se il mio 'shared_ptr' ha già puntato su un oggetto quando l'ho assegnato con' NULL' (o '0'), il conteggio ref dell'oggetto decrementato è precedente? –

risposta

22

La costruzione di default lo fa per voi:

template<class T> class shared_ptr 
{ 
public: 

    explicit shared_ptr(T * p = 0): px(p) 
    { 
     //Snip 
    } 

    //... 

private: 

    T * px;   // contained pointer 
    count_type * pn; // ptr to reference counter 
}; 
17

Questa è la costruzione di default, cioè .:

boost::shared_ptr<Type> s_obj; 

s_obj ora detiene un puntatore nullo e valuta a Boolean false quando la verità-test;