C释放静态变量

我希望我的课程有一个静态指针到动态分配的内存区域。我了解如何初始化它 – 在我的情况下,我将初始化它,当第一个对象需要它。但是,我不知道什么时候/在代码中释放它。当程序终止时,我想释放它。

我可能可以释放对象的析构函数中的指针,但是当对象是使用最后一个对象时,我必须保留一个对象数,看看是否可以自由。

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

请告诉我。

谢谢,
JBU

你有两个解决方案:

>不要删除删除它(你在C,你使用新的和删除,对吗?))。完成后,几乎所有的操作系​​统都将“释放”应用程序分配的内存。但是这不是一个很好的解决方案,例如使内存泄漏难以检测。
>将你的指针封装成一个类(作为成员),然后使用这个类作为静态的类型。这样,你知道类析构函数将在应用程序结束时被调用。然后,您只需在析构函数中删除数据,工作完成并清理即可。这是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() 

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

它只是为了给你一个如何做到这一点的想法。

http://stackoverflow.com/questions/2429408/c-freeing-static-variables

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:C释放静态变量