我在使用std :: list <std :: string>时偶然发现Stack Overflow问题内存泄漏与std :: string,其中一条评论说:
停止使用
new
这么多.我看不出你在任何地方使用新的任何理由.您可以使用C++中的值创建对象,这是使用该语言的巨大优势之一.您不必在堆上分配所有内容.不要像Java程序员那样思考.
我不太确定他的意思是什么.为什么要尽可能经常地用C++中的值创建对象,它在内部有什么区别?我误解了答案吗?
所以我在构造函数中查看了这个问题内存分配异常,我的老板在他的漂亮答案中说明析构函数不会被调用.
这让我想知道,
如果我要写
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
将调用析构函数,因为已经构造了基类.
没有内存泄漏?
我对么?