c++ - 当类被销毁时,在类中声明的 map 容器是否被销毁?

标签 c++

当对象 a 被销毁时,personsInHouse 映射是否也被销毁,或者我需要在析构函数中销毁它?如果不这样做会造成内存泄漏吗?

class A {
public:
    map<unsigned int, unsigned int> personsInHouse;
};

int main(){
    A a;
   A.hash[10] = 23;
};

最佳答案

personsInHouse 的生命周期是自动,因为您按值 存储它,并且它的生命周期是父对象的生命周期。因为你创造了a 按值,当它超出作用域时调用它的析构函数,一个对象的析构函数自动调用它包含的对象的析构函数。所以你不需要销毁personsInHouse ,就像你不需要销毁a .

如果personsInHouse是一个指针,你创建了一个map<unsigned int, unsigned int>动态存储new并将指向它的指针存储在 personsInHouse 中,那么您需要手动释放 personsInHouse 的内存在 A 的析构函数中指向通过delete .但您发布的代码并非如此。

您所做的是实现它的好方法:更喜欢按值存储您可以存储的每个对象,这样您就不必担心动态对象的生命周期管理。

关于c++ - 当类被销毁时,在类中声明的 map 容器是否被销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9350296/

相关文章:

c++ - C++ 如何确定重载运算符的参数?

c++ - 在 qt 中使用 graphviz

c++ - 静态模板函数的这种实现有什么问题?

c++ - 为什么这个自动矢量化器关心构造函数/析构函数?

c++ - 检测到堆损坏 - 带指针的类

C++/POSIX 如何以最有效的方式获取毫秒时间戳?

C++ 字符串连接

c++ - 为通用引用和指向成员的指针推导出冲突类型

C++ 程序在 VC++ 2010 中编译,但在 Visual C++ 6.0 中不编译

c++ - std::osyncstream 的用途?