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