我们这里有多少内存泄漏?

时间:2016-06-04 14:15:57

标签: c++ memory-leaks default-constructor

我无法通过谷歌搜索找到答案,所以我在这里问: 假设我们有这样的代码,我们不想重载复制构造函数

 #ifndef ARRAY_H
 #define ARRAY_H

 class Array { 
      public:
      Array(int = 10);

      int* ptr; 
      int size;
               }
 #endif // ARRAY_H

我们有:

#include <iostream>
#include "Array.h"
using namespace std;

Array::Array(int A)
 {
    size = (A > 0) ? A : 10;
    ptr = new int[size];

    for(int i=0; i<size; i++)
     { ptr[i] = i;}
 }

和main()是:

   Array newArray1(10); 
   Array newArray2(8);
   newArray2 = newArray1;

现在我们的教授说我们这里有问题因为我们两个都有相同的地址 newArray1和newArray2
我的问题是如果我们删除newArray1内存:我们有内存泄漏除了悬挂???在获取newArray1地址之前,ptr指向它的newArray2的ptr的内存发生了什么?这部分记忆现在存在吗???并有我们其他内存泄漏问题???

1 个答案:

答案 0 :(得分:0)

回答你的问题:你没有析构函数delete[]你在构造函数中分配给ptr的内存。所以是的,你有泄漏。

更好的选择是简单地使用std::unique_ptr而不是手动内存管理。

另外,为什么不使用构造函数初始化列表而是分配给构造函数体中的成员?