C++ 创建列表数组时内存泄漏

C++ 创建列表数组时内存泄漏,c++,C++,这是一个学校项目,所以不需要问我为什么使用列表数组的细节(我应该在不使用无序映射的情况下制作一个自定义哈希映射)。 我的问题是,当在构造函数中创建这个数组时(数组也需要使用动态内存进行分配),如果它无法分配内存并且“新建”失败,会发生什么情况? 由于每个列表都是在堆上分配的,这是否意味着它可能中途失败,并且可能存在内存泄漏 例如: class A { private: std::list<std::string> * a; public: A() : a(nullpt

这是一个学校项目,所以不需要问我为什么使用列表数组的细节(我应该在不使用无序映射的情况下制作一个自定义哈希映射)。 我的问题是,当在构造函数中创建这个数组时(数组也需要使用动态内存进行分配),如果它无法分配内存并且“新建”失败,会发生什么情况? 由于每个列表都是在堆上分配的,这是否意味着它可能中途失败,并且可能存在内存泄漏

例如:

class A
{
private:
    std::list<std::string> * a;
public:
    A() : a(nullptr)
    {
        a = new std::list<std::string>[10]; 
    }
};
A类
{
私人:
std::列表*a;
公众:
A():A(nullptr)
{
a=新标准::列表[10];
}
};
例如,这会不会在创建列表时中途失败,导致内存泄漏? 如果是这样,在这种情况下我将如何使用nothrow?我如何知道它在哪里停止和失败?
我应该独立初始化每个列表吗?

几乎不需要指向容器的指针。使用列表指针的原因是什么?应该解决的问题是什么?为什么不是一个列表向量(
std::vector
)?至于当
new
失败时会发生什么,任何教程或类都应该有相关信息。因为这些都是给定的指令-“使用动态分配的数组来保存存储桶”。不过,桶的数据结构取决于我们。我知道new失败时会发生什么,但我不明白的是,如果new在创建列表的过程中失败,是否会导致内存泄漏。如中所示,如果其中一个列表失败,会发生什么情况?(特别注意“如果构造函数引发异常,则对象的析构函数不会运行”。@NGneer对于“动态分配数组以容纳存储桶”,我建议实例化
std::vector>
,而不是使用
new
delete
std::vector
将为您执行必要的
new
delete
操作,您不必担心内存泄漏。(不用担心,即使您自己没有分配阵列,它仍然是动态分配的!)