如果我有一个包含在堆上分配的私有静态数据且永不更改的类,那么我应该在什么时候(如果有的话)删除它?
据我了解,永远不会构造一个类本身(因为类不是 C++ 中的第一类对象),那么就没有析构函数来删除其中的静态数据吗?我是 C++ 新手,如果我对 C++ 的理解存在根本性缺陷或者答案很明显,我很抱歉!提前谢谢,嗯。
原文由 Ell 发布,翻译遵循 CC BY-SA 4.0 许可协议
我使用的这个解决方案是添加一个静态函数来释放内存。只是在关机阶段的某个地方,调用者需要调用这个函数。我不确定这种做法是好是坏;至少它确实清理了堆上分配的内存。很高兴听到评论。
class example {
public:
static void dealloThing() { delete ptr; }
/**
* You could have more elaborate arguments to set special version
* of Thing, here not elaborating the details
*/
static void setThing(Thing* tptr) { ptr = tptr; }
private:
static Thing* ptr;
};
==== example.cpp ===
Thing* example::ptr=new Example();
原文由 Kemin Zhou 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
如果数据是静态的,则不会在堆上分配,并且会在进程关闭期间被破坏。
如果它是指向静态数据的指针,例如:
然后像所有其他动态分配的数据一样,它只会在您删除它时被破坏。有两种常见的解决方案:
使用智能指针,它有一个删除它的析构函数,或者
不要删除它;在大多数情况下,真的没有理由调用析构函数,如果你碰巧在其他静态对象的析构函数中使用了实例,你就会遇到破坏顺序问题。