如何在c ++中正确清理静态类

Har*_*Boy 1 c++ static-members c++11

我需要一个单例类,因为我只需要初始化一些变量.当我崩溃时,我无法清理班级时遇到问题.这是我班级的简化版本:

#include "stdafx.h"
#include <iostream>

class MyClass
{
public:
    MyClass();
    virtual ~MyClass();

    static MyClass& Instance();
    void DoSomething();
};

MyClass::MyClass()
{
    std::cout<<"MyClass constructor"<<std::endl;
    //initialise some stuff here
}

MyClass::~MyClass()
{
    std::cout<<"MyClass destructor"<<std::endl;
    //clean up some stuff here
}

MyClass& MyClass::Instance()
{
    static MyClass _instance;
    return _instance;
}

void MyClass::DoSomething()
{
    std::cout<<"Do something"<<std::endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
    MyClass& myClass = MyClass::Instance();
    myClass.DoSomething();

    delete &myClass;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我调用delete&myClass时,析构函数会被调用,然后它会像这样爆炸:

在此输入图像描述

我已经调查过,我认为我不应该在一个尚未使用new创建的对象上调用delete.它是否正确??

答案是否只是不使用任何删除并让析构函数在超出范围时自动调用(当主要返回时)?

Mik*_*our 6

我不应该在没有使用new创建的对象上调用delete.

绝对.它是一个静态对象,将在程序结束时自动销毁.没有必要(也没有办法)自己摧毁它.

(注意,当它是静态时,它在Instance()返回时超出范围时不会被销毁.而是在程序结束时,在返回main()或调用之后被销毁exit()).