提问人:Troy Hamilton 提问时间:7/21/2023 更新时间:7/21/2023 访问量:59
删除具有类成员的结构
Deleting a struct that has a class member
问:
我有一个结构:
struct holder
{
int val;
std::unordered_map<int, int> num_to_addr;
};
我动态分配一个结构体持有者:
struct holder* handle = new struct holder;
我确实在工作,然后想解除分配它:
delete handle;
我的问题是,手柄内部的unordered_map也会被破坏吗?
我正在运行使用上述代码的生产代码,该程序存在内存泄漏,该泄漏已好几天未被发现。我想知道这是否是导致内存泄漏的原因,因为此代码只运行了几次,而且泄漏也是间歇性的,所以可能就是这样,但没有人确切知道。
答:
0赞
Chris
7/21/2023
#1
是的,映射的析构函数将由自动生成的析构函数调用。现在,如果是动态分配的,并且没有像这样使用智能指针,那么您将需要编写一个显式删除它的析构函数。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;
}
};
评论
struct holder* handle = new struct holder;
holder* handle = new holder;
auto handle = new holder;
auto handle = std::make_unique<holder>();
delete handle;
struct holder* handle = new struct holder;
-- 我正在运行使用上述代码的生产代码 - 显然是由程序员编写的,而不是C++程序员。C