我相信我可能在滥用 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_datadata
。
我应该如何纠正内存泄漏?
最佳答案
也许应该这样做:您告诉基类分配一个包含 2*n 个元素的数组。此外,基类负责释放内存。不需要析构函数。
class dual_data : public data
{
dual_data(int n) : data(2*n)
{
}
}
关于C++:动态内存分配和类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31783293/