C 什么时候被调用

C++ when is the destructor called?

本文关键字:调用 什么时候      更新时间:2023-10-16

以下似乎是在C 中定义单例的推荐方法:

class Singleton {
private:
    Singleton();
public:
    static Singleton & get_instance() {
        static Singleton instance;
        return instance;
    }
     ~Singleton() {
        // destructor
     }
    Singleton(Singleton const&) = delete;
    void operator=(Singleton const&) = delete;
}

现在,采用此功能:

void foo() {
   Singleton & s = Singleton::get_instance();
}

我希望当Singleton实例不在该功能的范围中时会被调用,但事实并非如此。destructor什么时候被称为?

no,由于 get_instance()返回 Singleton对象的引用,因此将其引用保存到 s,另一个引用中。这两个参考都指向一个静态单例对象,即:

static Singleton instance;

因此,这里只有1个对象,instance。传递参考不会创建新对象,因此不会调用击曲线。

对象instance将被销毁,因此,在程序终止时,它的破坏者将被调用(因为它是static(。