我有一个构造函数,它使用new
运算符分配几个内存块。
X::X() {
a = new int[100];
b = new char[100];
c = new float[100];
}
我的问题是,如果c
的分配失败,并且构造函数抛出异常,是否会自动释放a
和b
的内存?
答案 0 :(得分:14)
自动释放a
和b
点不的内存。必须使用new[]
明确平衡每个delete[]
。
即使您的析构函数执行了删除(假设a
,b
和c
是类成员),那么您仍然会泄漏内存。那是因为在这种情况下析构函数不会被调用,因为对象无法构造。
使用std::vector
可以避免这些问题。
答案 1 :(得分:9)
a
,b
和c
都将被销毁。根据它们的类型,可能会也可能不会释放内存。如果它们是指针,则它们的析构函数不会执行任何操作,并且内存会泄漏。如果它们是某种智能指针,大概是它们的析构函数会释放内存。
答案 2 :(得分:3)
不,他们不会。这就是为什么你需要了解RAII,特别是容器和智能指针。
在您的情况下,您可以使用std::vector<T>
代替new T[100]
。
答案 3 :(得分:1)
变量a和b将不自动销毁。在您的情况下,您必须使用此 std :: vector 。这是因为每当我们使用new []运算符时,我们需要明确定义delete []。