【发布时间】:2015-08-03 09:00:03
【问题描述】:
我相信我可能是在滥用 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 对可以以不同的方式处理,而不仅仅是一个向量。例如,使用统计数据处理来完全计算相关性或其他东西。但是能够调用类dual_data中的函数min()、max()和mean()仍然很有用,它们继承自data。
我应该如何纠正内存泄漏?
【问题讨论】:
-
如果你不允许使用
std::vector(和模板):-(,你可以实现你自己的my_double_vector,只有内存管理和向量实现。然后用@创建你的data987654333@ 和额外成员为min、max、mean。 -
您的代码甚至无法编译,原因之一(除了在
class{...}末尾缺少;)是data没有默认构造函数,因此您必须在派生的dual_data成员初始化列表中调用其构造函数,请参阅@Brahim 的答案。 -
@vsoftco 这是一个示例代码,如问题所述,并未提供所有详细信息
标签: c++ oop memory memory-management memory-leaks