删除具有类成员的结构

问题描述 投票:0回答:1

我有一个结构:

struct holder
{
    int val;
    std::unordered_map<int, int> num_to_addr;
};

我动态分配一个结构持有者:

struct holder* handle = new struct holder;

我工作了然后想取消分配它:

delete handle;

我的问题是,句柄内的unordered_map也会被破坏吗?

我正在运行使用上面代码的生产代码,该程序有一个内存泄漏,几天来都没有发现。我想知道这是否是导致内存泄漏的原因,因为这段代码只运行了几次,而且泄漏也是间歇性的,所以可能就是这样,但没有人确切知道。

c++ destructor new-operator delete-operator default-constructor
1个回答
0
投票

是的,地图的析构函数将由自动生成的析构函数调用

holder
。现在,如果
num_to_addr
已被动态分配,并且不使用像
std::unique_ptr
这样的智能指针,那么您需要编写一个显式删除它的析构函数。

例如

struct holder {
    int val;
    std::unordered_map<int, int> *num_to_addr;

    // a bunch of constructors and copy assignment 
    // operators and such...

    ~holder() {
        delete num_to_address;
    }
};

您还需要阅读三/五/零规则

© www.soinside.com 2019 - 2024. All rights reserved.