c++ - 构造函数内存泄漏引发异常

标签 c++ memory-management

在此代码中,如果 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/

相关文章:

C++ vector 作为成员变量

c++ - 使用 NULL 值初始化内存块是否等同于 free?

c++ - 为结构(或类)行为数组赋值

c++ - 对已编译对象使用存档文件似乎会破坏编译

c++ - 有时需要使用这个吗?

c++ - boost 编译问题

c# - C# 引用类型在传递给方法时会分配新内存吗?

java - 跨编程语言的动态内存分配

c++ - 即使我将单个节点设置为 NULL 并删除它们,递归清除二叉树也不起作用

c++ - 连续分配大数据有好处吗?