返回具有数组成员的本地结构

时间:2019-05-24 14:17:31

标签: c++ struct return

我阅读了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成员的情况下才可以。如果是真的,那么我的想法是内存泄漏,不是吗? 有人可以全方位地为我分析一下吗?

2 个答案:

答案 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成员,是真的吗?

  

如果是真的,那么我的想法是内存泄漏,不是吗?

在没有删除分配的情况下丢失了指向动态分配对象的指针时,就会发生内存泄漏。您的示例不包含任何动态分配,因此不会发生内存泄漏。