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;
};
 
     
    