2013-04-26 7 views
14

Можно ли инициализировать shared_ptr с NULL значением?Инициализировать boost :: shared_ptr до NULL

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

Если нет, то как?

+8

Разве это не стандартная конструкция? –

+2

также nullptr имеет смысл, чем NULL, если C++ 11 – paulm

+1

Если мой 'shared_ptr' уже указал на объект, когда я назначил его с помощью' NULL' (или '0'), является ли число ref для более раннего объекта уменьшенным? –

ответ

22

конструкция по умолчанию делает это для вас:

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

Это строительство по умолчанию, т.е .:

boost::shared_ptr<Type> s_obj; 

s_obj теперь держит пустой указатель и оценивает в логическое значение FALSE при проверке истинности;

Смежные вопросы