我无法通过谷歌搜索找到答案,所以我在这里问: 假设我们有这样的代码,我们不想重载复制构造函数
#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的内存发生了什么?这部分记忆现在存在吗???并有我们其他内存泄漏问题???
答案 0 :(得分:0)
回答你的问题:你没有析构函数delete[]
你在构造函数中分配给ptr
的内存。所以是的,你有泄漏。
更好的选择是简单地使用std::unique_ptr
而不是手动内存管理。
另外,为什么不使用构造函数初始化列表而是分配给构造函数体中的成员?