引用变量调用析构函数

Reference Variable Calling Destructor

本文关键字:析构函数 调用 变量 引用      更新时间:2023-10-16

考虑以下代码:

#include <iostream>
class Singleton
{
public:
    // GetInstance returns an instance to an existing Singleton object
    static Singleton& GetInstance()
    {
        static Singleton instance;
        return instance;
    }
    // Destructor
    ~Singleton()
    {
        std::cout << "Singleton destructor" << std::endl;
    }
private:
    // Private constructor
    Singleton()
    {
        std::cout << "Singleton constructor" << std::endl;
    }
};
int main()
{
    Singleton mySingleton = Singleton::GetInstance();
    return 0;
}

其输出为:

Singleton constructor
Singleton destructor
Singleton destructor

似乎正在清理引用变量mySingleton,因此调用析构函数两次。有什么办法可以避免这种行为吗?

您正在此处复制实例:

Singleton mySingleton = Singleton::GetInstance();

您还想使复制构造函数和赋值运算符私有,这将迫使您使用引用:

Singleton& mySingleton = Singleton::GetInstance();