我是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相同的问题?
答案 0 :(得分:3)
简短的回答是这不会编译。您正在尝试将Foo *
分配给Foo
。例如。在gcc上生成编译错误:
在函数'void myFunction()'中:
错误:'operator ='不匹配(操作数类型为'Foo'和'Foo *')
但是,让我们假装参数,这不是问题。上面会发生的是foo
默认构造在myFunction
的本地堆栈上。退出时,foo
超出范围并执行析构函数,因此不会泄漏。
另一方面,现在new Foo(params);
是另一回事。这为Foo
实例的免费商店分配空间并调用Foo(params)
构造函数。当myFunction
退出时,指向此动态分配Foo
的指针仍然存在(即使您无法引用它),因为没有delete
运算符与它配对。除非您在代码中的其他位置delete
使用此指针,否则此将泄漏。