C++ 使用智能指针实现单例模式

单例模式是指该类的对象只有一个对象,使用智能指针的原因,是因为无法删除单例模式中的静态成员

代码实现

/*
 * 单例模式
 * 2016年12月20日17:29:59
*/

#include <iostream>
#include <memory>

using namespace std;

class SingleTon
{
public:
    static SingleTon* GetInstance()
    {
        // if (instance_ == NULL)
        //   instance_ = new SingleTon;
        // return instance_;

        if (!instance_.get())
            instance_ = auto_ptr<SingleTon>(new SingleTon); // 智能指针可以释放改资源
        return instance_.get(); // 返回instance_.get();并没有返回instance的指针的所有权
        // return instance_.release(); // release()方法返回指针的所有权
    }
    ~SingleTon() { cout << "~SingleTon" << endl;/* delete instance_; */}

private:
    SingleTon() { cout << "SingleTon construct" << endl; }
    SingleTon(const SingleTon& other);
    SingleTon& operator = (const SingleTon& other);

    // static SingleTon* instance_;
    static auto_ptr<SingleTon> instance_;
};

auto_ptr<SingleTon> SingleTon::instance_;
int main(void)
{
    SingleTon* s1 = SingleTon::GetInstance();
    SingleTon* s2 = SingleTon::GetInstance();
    return 0;
}

/*
 * output:
 *
SingleTon construct
*/

/*
 * static SingleTon* instance_; 指针最后没有被销毁
*/

/*
SingleTon construct
~SingleTon

使用智能指针可以在指针的生命周期结束之后,释放指针
*/

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部