Here are two singletons, what does make the first one preferable, as both will instantiate only one instance of the corresponding class:
First:
class SharedPointerSingleton { public: static std::shared_ptr< SharedPointerSingleton> getSingleton( { if( s_pSingleton== 0 ) s_pSingleton = std::shared_ptr< SharedPointerSingleton>(new SharedPointerSingleton()); return s_pSingleton; } private: SharedPointerSingleton(){}; static std::shared_ptr< SharedPointerSingleton> s_pSingleton; }; Second:
class PointerSingleton { public: static PointerSingleton * getSingleton( { if( pSingleton== 0 ) pSingleton = new PointerSingleton ()); return pSingleton; } private: PointerSingleton (){}; static PointerSingleton * pSingleton; };
getSingletonand they use0instead ofnullptr.