从构造函数内存泄漏中抛出异常

时间:2018-06-08 20:01:48

标签: c++ memory-management

在此代码中,如果if子句为true,则从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)吗?

2 个答案:

答案 0 :(得分:3)

这不是泄漏因为"新表达"如果在执行期间抛出异常,则负责清理。换句话说,"新表达"分配内存,然后调用Route::get('/login', 'UsersController@login')->name('login'); 的构造函数。如果此构造函数抛出"新表达式"自动释放先前分配的内存。

答案 1 :(得分:0)

我认为这个问题已经得到解答,但在构建对象时应该使用RAII。具体而言(已经多次指出)是使用spring.cloud.stream.bindings(和@RefreshScope,具体取决于您的标准。)

std::unique_ptr