如何在C ++中调用单例实例的析构函数?

时间:2018-06-26 07:37:51

标签: c++

class m
{
    public:
    static m* get()
    {
        static m s;
        m* p= NULL;
        p = &s;
        return p;
    }
    private:
    m();
    ~m();
}

2 个答案:

答案 0 :(得分:4)

假设您想知道如何销毁单例实例(在极少数情况下,显式调用析构函数是适当的),那么您可以将单例实现为可以销毁的事物。
(这是否真的是一个单例辩论,但该讨论不属于此处。)

这意味着您需要动态创建它。
像这样:

class m
{
public:
    static m* get()
    {
        if (!s) s = new m;
        return s;
    }

    static void destroy() { delete s; s = nullptr; }

    m(const m&) = delete;
    m& operator=(const m&) = delete;

private:
    m();
    ~m();
    static m* s = nullptr;
};

(在此处插入强制警告,指出此变种根本不是线程安全的。)

答案 1 :(得分:1)

最简单的答案是exit(0)。单身人士在计划期间一直有效,因此您必须结束计划。