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

标签 c++ oop memory memory-management memory-leaks

我相信我可能在滥用 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/

相关文章:

c++ - 这是初始化二维动态数组的有效 C++ 吗?

c++ - 类 c++ 不存在默认构造函数

php - 创建专业代码是否需要使用依赖注入(inject)模式?

c++ - 具有平凡构造函数的派生类的统一初始化

c++ - 如何声明 constexpr C 字符串?

javascript - 原型(prototype)继承设置

java - 我想通过使用另一个带有交换方法的类而不是通常可用的通用交换函数来交换两个数字

ios - 内存问题decodeObjectForKey(Swift项目)

c - 顺序访问内核驱动程序中的大页面

performance - 虚拟内存相对于直接映射内存的性能影响是什么?