which one of singleton implementation is better and what are advantages and disadvantages?
//first
class singleton_SharedPtr{
public:
singleton_SharedPtr(const singleton_SharedPtr&) = delete;
singleton_SharedPtr& operator=(const singleton_SharedPtr&) = delete;
~singleton_SharedPtr(){}
//is it normal to return weak_ptr instead of share_ptr in the getInstance method????
static std::shared_ptr<int> getInstance(){
    std::cout<<"referenced before if condfition, use_count : "<<instance.use_count()<<std::endl;
    if(instance==nullptr){
        instance=std::make_shared<int>();
    }
    std::cout<<"referenced after if condfition, use_count : "<<instance.use_count()<<std::endl;
    return instance;
}
private:
singleton_SharedPtr(){}
static std::shared_ptr<int> instance;
};
std::shared_ptr<int> singleton_SharedPtr::instance=nullptr;
//second
class singleton_UniquePtr{
public:
singleton_UniquePtr(const singleton_UniquePtr&) = delete;
singleton_UniquePtr& operator=(const singleton_UniquePtr&) = delete;
~singleton_UniquePtr(){}
static int* getInstance(){
    if(instance==nullptr){
        instance=std::make_unique<int>();
    }else
        std::cout<<"instance.get: "<<instance.get()<<std::endl;
    return instance.get();
}
private:
singleton_UniquePtr(){}
static std::unique_ptr<int> instance;
};
std::unique_ptr<int> singleton_UniquePtr::instance=nullptr;
we need to access to instance inside the loop. will memory leakage happen or not? if yes, which one of them cause to memory leakag.
//1:
while(1){std::shared_ptr<int>sharedPtr=
singleton_SharedPtr::getInstance();
    //use sharePtr...
    //...
}
//2:
 while(1){
 std::weak_ptr<int>weakPtr=singleton_SharedPtr::getInstance();
    //use sharePtr...
    //...
}
//3:
while(1){
    int* rawPtr=singleton_UniquePtr::getInstance();
    //use rawPtr...
     //...
    if(rawPtr){
        delete rawPtr;
        rawPtr=nullptr;
    }
}
any suggestion about detail of performance ,memory leakage ,being standard and ... ? thank you very much.
 
    