在此代码中,如果 if
子句为真,则从 CurrentAccount
构造函数中抛出异常:
void Bank::createAccount(string accountType,int iban,int ownerid,double amount)
{
Account* toAddAccount=nullptr;
if(accountType=="CurrentAccount")
{
toAddAccount=new CurrentAccount(iban,ownerid,amount);
}
}
如您所见,异常并未在此方法中捕获,而是在堆栈中被提升到更高的位置。
我想知道,如果我不删除 toAddAccount
(CurrentAccount
构造函数仅适用于 int),会不会出现内存泄漏?
最佳答案
这不是泄漏,因为“新表达式”负责在执行期间抛出异常时进行清理。换句话说,“新表达式”分配内存,然后调用 CurrentAccount
的构造函数。如果此构造函数抛出“新表达式”,则会自动释放先前分配的内存。
关于c++ - 构造函数内存泄漏引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50767673/