小编Joh*_*Liu的帖子

调用对象的析构函数是否等同于在对象上调用 delete?

class TrieTree{
private:
    string ch;
    unordered_map<string, TrieTree*> child;
public:
    TrieTree(string val): ch(val){}
    ~TrieTree(){
        for(unordered_map<string, TrieTree*>::iterator itr = this->child.begin();
            itr != this->child.end();
            itr++){

            (itr->second)->~TrieTree();
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

我担心上面的析构函数是否会造成内存泄漏,因为我不确定调用对象的析构函数是否等同于调用对象的 delete。我不能直接在对象上调用 delete ,因为目的是递归删除对象的子对象。通过delete (itr->second);在(itr->second)->~TrieTree();我遇到分段错误之后调用,所以我猜测对象可能在其析构函数之后被删除了?

c++ memory destructor class

4
推荐指数
1
解决办法
74
查看次数

标签 统计

c++ ×1

class ×1

destructor ×1

memory ×1