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

How memory released after function finished in C++ in this case

本文关键字:C++ 释放 内存 这种情况下 函数      更新时间:2023-10-16

我是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
}

当程序传递此函数时,实例 1 是否自动释放?实例 2 的相同问题?

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

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

但是,让我们假装为了争论,这不是问题。上面会发生什么是foo在本地myFunction堆栈上构建默认值。在退出时,foo超出范围,其析构函数被执行,因此此处没有泄漏。

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