gpt4 book ai didi

c++ - 如何正确清理 C++ 中的静态类

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:18 24 4
gpt4 key购买 nike

我需要一个单例类,因为我只需要初始化一些变量一次。当我无法清理正在崩溃的类(class)时,我遇到了问题。这是我的类(class)的简化版本:

#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;
}

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

enter image description here

我已经调查过,我认为我不应该对一个没有使用 new 创建的对象调用 delete。这是正确的吗??

答案是简单地不使用任何删除并让析构函数在超出范围时(当 main 返回时)自动调用吗?

最佳答案

I shouldn't be calling delete on an object that has not been created using new.

当然。它是一个静态对象,会在程序结束时自动销毁。没有必要(也没有办法)自己销毁它。

(请注意,由于是静态的,当 Instance() 返回时,它不会在超出范围时被销毁。相反,它会在程序结束时从 main( ) 或调用 exit())。

关于c++ - 如何正确清理 C++ 中的静态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26178228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com