c++ - 避免 C++ 类中的内存泄漏

标签 c++ pointers memory-leaks unordered-map delete-operator

我已经使用以下头文件定义了一个 C++ 类:

class EarleyParser
{

    public:

        EarleyParser();
        virtual ~EarleyParser();

        void initialize( string filePath, bool probabilityParse );

    private:

        bool probabilityParser;

        typedef unordered_map< string, list<Production>* > productionHashTable;
        productionHashTable earlyHashTable;

};

如您所见,该类的成员元素是一个 unordered_map。其关键元素是字符串,内容元素是指向另一个名为 Production 的对象列表的指针(不要介意,它可以是任何东西)。

我的问题是我是否应该将它留给默认析构函数以释放分配的内存,或者我是否应该手动检查哈希表并删除其所有元素。

在第二种情况下,程序是什么?为每个元素调用它可以吗?

EarleyParser::productionHashTable::const_iterator got = this->earlyHashTable.find( "key" );
delete[] got->second;

最佳答案

您需要说明谁拥有 list<Production> EarlyParser 拥有的对象.如果EarlyParser拥有它们,那么您需要释放资源。您可以通过遍历列表并调用 delete 来完成此操作在每个取消引用的迭代器上(不是 delete[] )。或者您可以存储 unique_ptr<list<Production>>反而。另一方面,最简单的解决方案是存储 list<Production>除非您真的有非常充分的理由存储指针。

关于c++ - 避免 C++ 类中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12686510/

相关文章:

java - 尝试强连接对象时出现奇怪的指针问题

google-maps - 谷歌地图 v3 中有类似于 GUnload() 的东西吗?

c++ - 为什么我得到 "vector iterators incompatible"?

c++ - 如何创建一个随机的 bit64 值

c++ - 如何正确打印 c 字符串中的每个元素?

C Socket Server,内存随文件写入而增加

javascript - IE8中Dojo 1.7.2引起的内存泄漏

c++ - WinAPI 在销毁前一个窗口后创建另一个窗口

c - 应该通过引用调用的函数不起作用

c - 结构体内部结构体和指针