gpt4 book ai didi

C++:动态内存分配和类构造函数

转载 作者:行者123 更新时间:2023-11-30 03:50:24 24 4
gpt4 key购买 nike

我相信我可能在滥用 OOP 或在类构造函数中的内存分配上做错了什么。

我将用一个简化的例子来说明我在做什么:

class data
{
data(int n) : m_data(new double[n])
{
}

virtual ~data()
{
delete [] m_data;
}

double min() { ... }
double max();
double mean(); // return minimum, maximum and mean values

double *m_data;
}

class dual_data : public data
{
dual_data(int n) : m_data(new double[2*n])
{
}
}

我相信这会导致灾难性的内存泄漏。 (应该很清楚为什么,因为一个构造函数先于另一个构造函数分配内存,然后用另一个调用 new 覆盖指针。)

如果还不清楚,我有 2 个类:一个是类似于 std::vector 的类,它为我处理内存中的数据存储,另一个是派生类它做同样的事情,但需要 x,y 对格式的数据,而不是单个值。这样做的原因是 x,y 对可以用不同的方式处理,而不仅仅是一个 vector 。例如,通过统计数据处理来计算相关性或其他完全不同的东西。但是能够在类 中调用函数 min()max()mean() 仍然很有用dual_data,继承自data

我应该如何纠正内存泄漏?

最佳答案

也许应该这样做:您告诉基类分配一个包含 2*n 个元素的数组。此外,基类负责释放内存。不需要析构函数。

class dual_data : public data
{
dual_data(int n) : data(2*n)
{
}
}

关于C++:动态内存分配和类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31783293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com