我有这样的事情:
void Test(void)
{
char errorMessage[256];
spintf(errorMessage,... blablabla);
throw new CustomException(errorMessage);
}
这会是内存泄漏,因为errorMessage不会被释放吗?或者这会在try {} catch中访问异常消息时导致异常,因为在从函数中退出时已释放errorMessage?
提前致谢。
答案 0 :(得分:7)
当catch处理程序访问时,errorMessage
的内存将被释放。但是,您可以将其复制到std::string
的构造函数中的CustomException
。
答案 1 :(得分:7)
答案是肯定的,非常可能。你永远不应该抛出用new
创建的对象。相反,抛出值:
throw CustomException(errorMessage);
并使用const引用捕获:
try {
...
}
catch( const CustomException & e ) {
...
}
抛出值意味着编译器处理抛出对象的生命周期。此外,在您的代码中,如果异常类的复制构造函数不正确,您可能会遇到另一个问题 - 但是,这与异常处理没有任何关系。
答案 2 :(得分:0)
它不会导致内存泄漏,但可能会导致未定义的行为,具体取决于您对该异常执行的操作。我想只有在分配动态内存时才会发生内存泄漏