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.但这并不会使我的第一个陈述失效.因为静态指针指向的对象不是静态的.它是指针,它是静态的,而不是指针所指向的对象.
Jam*_*nze 13
如果数据是静态的,则它不会在堆上分配,并且在关闭进程期间将被破坏.
如果它是指向静态数据的指针,例如:
Something* MyClass::aPointer = new Something;
Run Code Online (Sandbox Code Playgroud)
然后像所有其他动态分配的数据一样,只有在删除它时才会被破坏.有两种常见的解决方案:
使用智能指针,它有一个删除它的析构函数,或
不要删除它; 在大多数情况下,实际上没有理由调用析构函数,如果您碰巧在其他静态对象的析构函数中使用该实例,您将遇到破坏问题的顺序.