C++删除静态数据

Ell*_*Ell 17 c++ static memory-management

如果我有一个包含在堆上分配的永不更改的私有静态数据的类,那么何时(如果有的话)应该删除它?

据我所知,类本身永远不会被构造(因为类不是C++中的第一类对象),那么没有析构函数来删除静态数据?我是C++的新人,很抱歉,如果我对c ++的理解存在根本性的缺陷或答案是显而易见的!在此先感谢,ell.

Naw*_*waz 13

static 数据意味着,它持续整个程序的持续时间.

但是,如果您static在指针中使用:

static A *pA = new A();
Run Code Online (Sandbox Code Playgroud)

然后你可以通过写作删除它delete pA.但这并不会使我的第一个陈述失效.因为静态指针指向的对象不是静态的.它是指针,它是静态的,而不是指针所指向的对象.

  • @Ell:如果你的静态对象是动态分配内存的指针,你应该*删除它,但通常不是绝对必要的.现代系统无论如何都会在你释放它之后不久就会重新开始.指针本身将以任一方式继续,它是指针是静态的,而不是它指向的对象. (3认同)

Jam*_*nze 13

如果数据是静态的,则它不会在堆上分配,并且在关闭进程期间将被破坏.

如果它是指向静态数据的指针,例如:

Something* MyClass::aPointer = new Something;
Run Code Online (Sandbox Code Playgroud)

然后像所有其他动态分配的数据一样,只有在删除它时才会被破坏.有两种常见的解决方案:

  • 使用智能指针,它有一个删除它的析构函数,或

  • 不要删除它; 在大多数情况下,实际上没有理由调用析构函数,如果您碰巧在其他静态对象的析构函数中使用该实例,您将遇到破坏问题的顺序.


ks1*_*322 5

你可以把这个班级放进去std::auto_ptr.然后它将在程序关闭时自动删除.否则内存泄漏工具会抱怨你的班级泄漏.另一方面,这个内存泄漏是无害的,因为程序运行完毕.