我有一个结构:
struct holder
{
int val;
std::unordered_map<int, int> num_to_addr;
};
我动态分配一个结构持有者:
struct holder* handle = new struct holder;
我工作了然后想取消分配它:
delete handle;
我的问题是,句柄内的unordered_map也会被破坏吗?
我正在运行使用上面代码的生产代码,该程序有一个内存泄漏,几天来都没有发现。我想知道这是否是导致内存泄漏的原因,因为这段代码只运行了几次,而且泄漏也是间歇性的,所以可能就是这样,但没有人确切知道。
是的,地图的析构函数将由自动生成的析构函数调用
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;
}
};
您还需要阅读三/五/零规则。