这样做是一个错误:
if(some_error)
throw Cat("Minoo");
Run Code Online (Sandbox Code Playgroud)
Cat是一个班级.
然后在一些其他函数调用抛出异常的方法...
我会:
catch(const Cat &c)
{
}
Run Code Online (Sandbox Code Playgroud)
如果它无效,我是否使用新的Cat("Minoo");
这会导致内存泄漏吗?
小智 6
1)无效?不,这正是你应该做的:投掷一个物体.throw语句中的对象可能在堆栈中,但在抛出时会被复制.比较,例如,执行返回Cat("Minoo")的效果;
2)抛出指针会导致指向对象泄漏吗?是的,如果对象是在堆上分配的,除非您安排删除它.但是你应该避免抛出指针作为一般规则.
您编写的内容完全有效,通常最好在堆上分配异常对象.
如果你要使用new,除非你在捕获异常的异常处理程序中删除了对象,否则你当然会得到内存泄漏.
C++ faq中的这个问题(以及后两个问题)解决了这个问题.