C 删除静态数据

新手上路,请多包涵

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

据我了解,永远不会构造一个类本身(因为类不是 C++ 中的第一类对象),那么就没有析构函数来删除其中的静态数据吗?我是 C++ 新手,如果我对 C++ 的理解存在根本性缺陷或者答案很明显,我很抱歉!提前谢谢,嗯。

原文由 Ell 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

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

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

 Something* MyClass::aPointer = new Something;

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

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

  • 不要删除它;在大多数情况下,真的没有理由调用析构函数,如果你碰巧在其他静态对象的析构函数中使用了实例,你就会遇到破坏顺序问题。

原文由 James Kanze 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏