在这种情况下,在C ++中完成函数后如何释放内存

时间:2017-01-31 04:00:30

标签: c++ memory-management

我是C ++的新手,我想知道在这种情况下如何释放内存: 我有一个功能:

void myFunction() {
    Foo foo; // at this line, new Foo instance created with constructor Foo(), instance1
    foo = new Foo(params); // this line, reassign object, new another instance created - instance2
}

程序通过此函数时,是否自动释放instance1? 与instance2相同的问题?

1 个答案:

答案 0 :(得分:3)

简短的回答是这不会编译。您正在尝试将Foo *分配给Foo。例如。在gcc上生成编译错误:

  

在函数'void myFunction()'中:
  错误:'operator ='不匹配(操作数类型为'Foo'和'Foo *')

但是,让我们假装参数,这不是问题。上面会发生的是foo默认构造在myFunction的本地堆栈上。退出时,foo超出范围并执行析构函数,因此不会泄漏。

另一方面,现在new Foo(params);是另一回事。这为Foo实例的免费商店分配空间并调用Foo(params)构造函数。当myFunction退出时,指向此动态分配Foo的指针仍然存在(即使您无法引用它),因为没有delete运算符与它配对。除非您在代码中的其他位置delete使用此指针,否则此将泄漏