首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >构造函数内存泄漏引发异常

构造函数内存泄漏引发异常
EN

Stack Overflow用户
提问于 2018-06-09 04:01:48
回答 2查看 309关注 0票数 0

在此代码中,如果if子句为真,则从CurrentAccount构造函数引发异常:

代码语言:javascript
复制
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),会不会有内存泄漏?

EN

回答 2

Stack Overflow用户

发布于 2018-06-09 04:11:39

这不是泄漏,因为"new expression“负责在执行过程中抛出异常时进行清理。换句话说,“新表达式”分配内存,然后调用CurrentAccount的构造函数。如果这个构造函数抛出,“新表达式”自动释放先前分配的内存。

票数 3
EN

Stack Overflow用户

发布于 2018-06-09 04:27:34

我认为这个问题已经得到了回答,但在构建对象时应该使用RAII。具体来说(前面已经多次指出)是使用std::unique_ptr (和make_unique,具体取决于您的标准)。

代码语言:javascript
复制
Account* Bank::createAccount(string accountType,int iban,int ownerid,double amount)
{
    std::unique_ptr<Account> toAddAccount;
    if(accountType=="CurrentAccount")
    {
        toAddAccount=new CurrentAccount(iban,ownerid,amount);
    }

    // presumably more code

    return toAddAccount.release(); // your factories shouldn't care where your accounts are stored.
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50767673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档