gpt4 book ai didi

C++ 释放静态变量

转载 作者:IT老高 更新时间:2023-10-28 12:59:44 26 4
gpt4 key购买 nike

我希望我的类有一个指向动态分配的内存区域的静态指针。我了解如何初始化它 - 在我的情况下,我将在第一个对象需要它时对其进行初始化。但是,我不知道代码中何时/何地释放它。我想在程序终止时释放它。

我可能能够释放对象析构函数中的指针,但是我必须维护一个对象计数,以查看当对象是最后一个正在使用的对象时释放是否安全。

有没有更优雅的方法来做到这一点?

请告诉我。

谢谢,jbu

最佳答案

这里有两种解决方案:

  1. 不要删除删除它(你在 C++ 中,你使用 new 和 delete,对吗?;))。今天几乎所有的操作系​​统都会在应用程序完成后“释放”应用程序分配的内存。但这不是一个好的解决方案,例如,它会使内存泄漏难以检测。
  2. 将你的指针封装到一个类中(作为成员),然后使用这个类作为你的静态类型。这样,您就知道类析构函数将在应用程序结束时被调用。然后,您只需删除析构函数中的数据,即可完成并清理工作。这就是 RAII 的力量。

我建议你做 2,这是一个非常干净的方法。


这是一个简单的例子。而不是这样做

static Thing* things = new Thing(); // or whatever way to initialize, here or in a specific function

你会这样做的:

class ThingManager // or whatever name you like
{
public:
ThingManager( Thing* thing ) : m_thing( thing ) { }//or create it here? whatever solution suits your way of creating the data

~ThingManager() { delete m_thing; } // THAT's the important part!

Thing* instance() const { return m_thing; } // or whatever accessor you need, if you need one

private:
Thing* m_thing;
};

然后

static ManagedThing thing; // now i can access it via thing.instance() 

当程序结束时,静态变量(不再是指针)将被销毁,并调用它的析构函数。

编写它只是为了让您了解如何做到这一点。

关于C++ 释放静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2429408/

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