所以我在构造函数中查看了这个问题内存分配异常,我的老板在他的漂亮答案中说明析构函数不会被调用.
这让我想知道,
如果我要写
struct XBase
{
int* a;
char* b;
float* c;
XBase() : a(nullptr), b(nullptr), c(nullptr) {}
~XBase()
{
delete[] a; delete[] b; delete[] c;
}
};
Run Code Online (Sandbox Code Playgroud)
和
struct X : XBase
{
X() {
a = new int[100];
b = new char[100];
c = new float[100];
}
}
Run Code Online (Sandbox Code Playgroud)
然后,如果c
失败的分配(抛出异常),那么XBase
将调用析构函数,因为已经构造了基类.
没有内存泄漏?
我对么?
你是对的; 这将有效,因为:
X
构造函数体执行时,XBase
已经构造,并且将调用其析构函数.delete
或者delete[]
使用空指针是完全有效的,并且什么都不做.所以,如果分配a
,b
或者c
失败,析构函数XBase
会收回一切.
但是,显然,这种设计可以让你编写更多需要的代码,因为你可以简单地使用std::vector
或std::unique_ptr<T[]>
.
归档时间: |
|
查看次数: |
164 次 |
最近记录: |