2013-04-26 196 views
14

我可以使用NULL值初始化shared_ptr值嗎?將boost :: shared_ptr初始化爲NULL

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

如果不是,那怎麼樣?

+8

這不就是默認構造嗎? – 2013-04-26 05:36:30

+2

也nullptr比NULL更有意義如果C++ 11 – paulm 2013-04-26 09:16:34

+1

如果我的'shared_ptr'已經指向一個對象,當我給它分配一個NULL(或'0')時,是否減少了先前對象的引用計數? – 2015-03-24 09:51:18

回答

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當真理測試;