单例类的析构函数被调用两次!

sri*_*enu 3 c++

我有如下代码:

    class Singleton {
        private:
        int i;
        static bool stnflag;
        static Singleton* single;
        Singleton(int a)
        {
            i=a;
        }
        public:
        static Singleton* getinstance(int);
        void function();
        ~Singleton()
        {
          cout << "destructor is being called" << endl;
          stnflag=false;
        }
};

bool Singleton::stnflag=false;
Singleton* Singleton::single=NULL;
Singleton* Singleton::getinstance(int a)
{
        if(!stnflag)
        {
          single = new Singleton(a);
          stnflag=true;
          return single;
        }
        else
        {
                cout << "already single object created" << endl;
                return single;
        }
}

void Singleton::function()
{

cout << "private member value in single ton class is :" << i << endl;
}

int main()
{
        Singleton *s1,*s2;
        s1=Singleton::getinstance(3);
        s1->function();
        s2=Singleton::getinstance(4);
        s2->function();
        delete s1;
        delete s2;
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

当删除s2​​被调用时,析构函数也被第二次调用!!但是怎么可能呢?已经删除s1 ri8中删除了对象的指针.但是我在析构函数中获取了第二个删除s2的print语句..可以任何人给出原因..但是根据我的假设,它会因为错误而错过双免费指针ri8 !!

Oli*_*rth 12

好吧,不要delete两次打电话!

调用delete已删除的对象是未定义的行为,而不是保证崩溃.

您应该考虑getinstance()返回引用,而不是指针.