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.它是否正确??
答案是否只是不使用任何删除并让析构函数在超出范围时自动调用(当主要返回时)?
我不应该在没有使用new创建的对象上调用delete.
绝对.它是一个静态对象,将在程序结束时自动销毁.没有必要(也没有办法)自己摧毁它.
(注意,当它是静态时,它在Instance()返回时超出范围时不会被销毁.而是在程序结束时,在返回main()或调用之后被销毁exit()).