如果构造函数无法在C++中分配内存,该怎么办?

bod*_*ydo 4 c++ memory constructor allocation return

我刚遇到一个问题,其中类的构造函数需要分配内存.所以我高兴地写道char *mem = static_cast<char*>(malloc(100*sizeof(*mem)));.但后来我突然意识到,如果出现错误,我无法返回错误代码(我的代码中没有使用异常).我怎么解决这个问题?

我应该添加一个bool initialized成员然后在上课后然后立即检查,如:

myClass mc;
if (!mc.initialized) {
    printf("Memory allocation failed in mc's constructor\n");
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

谢谢,Boda Cydo.

Shi*_*rik 9

你应该使用new,而不是malloc.当你内存不足时,新抛出std :: bad_alloc.如果您未能分配(或由于任何其他原因导致初始化问题),则应从构造函数传播异常,因为这是阻止析构函数被调用的唯一方法.如果构造函数成功完成,则必须调用析构函数(当然,除非它已分配堆并且从未释放).


Nik*_*sov 5

这就是发明的异常.另外,使用new而不是malloc(3).

  • 我强烈建议你忘掉这一点,因为异常实际上是在C++中保留RAII安全性的唯一方法. (11认同)