【发布时间】:2021-12-01 16:47:17
【问题描述】:
考虑以下代码:
int main(){
A c;
A array[5];
A *ptr;
}
假设 A 类没有内存泄漏。以上代码有没有内存泄露?
我的想法:
这六个A 类型对象的变量c 和array 将被分配/实例化。
ptr 变量未分配任何内容,因此不会在那里创建任何内容。
对于c 和array,在程序退出之前,将调用它们的析构函数。
所以,不应该有任何内存泄漏。
我不确定我上面的推理。
另外,array 的内存会被分配 - 在堆栈外、堆外还是在全局内存空间中?
【问题讨论】:
-
我认为你是对的,第一个是堆栈分配的,会自动释放(假设 A 没有内存泄漏)。第二个基本相同,只是五次,第一个是一个本地指针,总是无泄漏
-
关于你的第二个问题:只要A没有在堆上分配任何东西,一切都会被堆栈分配
-
内存泄漏意味着存在要泄漏的具有动态存储持续时间的对象。您的示例不包含这样的对象。
-
添加的问题不属于这个问题,但是:C++ 对堆栈或堆一无所知,但它可能最终会出现在堆栈上。
-
你的推理是正确的,只是当你开始分配内存时的一个提示,你确实需要指向 A 的指针,然后看看 std::unique_ptr/std::make_unique。不像现在大多数书籍中仍然是首选方法。 (isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-owner)
标签: c++ memory-leaks