我阅读了How to return a local array from a C/C++ function?主题,并对它的最后一个代码块感到困惑:
#include <iostream>
using namespace std;
struct arrWrap {
int arr[100];
~arrWrap()
{
}
};
struct arrWrap fun()
{
struct arrWrap x;
x.arr[0] = 10;
x.arr[1] = 20;
return x;
}
int main()
{
struct arrWrap x = fun();
cout << x.arr[0] << " " << x.arr[1];
return 0;
}
在我的想法中,只有在函数完成并返回后默认构造函数不销毁arr成员的情况下才可以。如果是真的,那么我的想法是内存泄漏,不是吗? 有人可以全方位地为我分析一下吗?
答案 0 :(得分:3)
成为类的成员是唯一一次可以一次复制数组的事情。
(实际上,std::array
就是这样工作的!只需将C数组包装在一个类中。)
这很安全,很好。复制arrWrap
对象时,封装的数组也将复制。
没有动态分配,也没有内存泄漏。即使不是这种情况,所以复制也不会发生,并且您还有某种悬而未决的参考文献being able to see the old values would not necessarily be evidence of a memory leak。
答案 1 :(得分:0)
如果默认构造函数不会销毁arr成员
如果默认构造函数在函数完成并返回后没有销毁arr成员,是真的吗?
如果是真的,那么我的想法是内存泄漏,不是吗?
在没有删除分配的情况下丢失了指向动态分配对象的指针时,就会发生内存泄漏。您的示例不包含任何动态分配,因此不会发生内存泄漏。