【问题标题】:Constructing a class containing pointers构造一个包含指针的类
【发布时间】:2012-09-15 11:43:48
【问题描述】:

我有一个存储 16 个浮点数的数组的类。我使用浮点指针将它们存储为数组,因此我必须使用构造函数中的 new 运算符初始化数组。我的问题是,将 16 个浮点数的数组直接定义为类的一部分是否更有效/更好,还是我应该继续让类通过指针存储数据并在构造函数中调用 new?

【问题讨论】:

  • 对固定大小的数组使用std::array,否则使用std::vector(除非另一种类型更适合您的需要),或者如果您没有 C++11。如果每个实例都使用相同的值,请将其设为静态。
  • 如果你总是需要那个float数组,那么将数组作为成员更合理。它更高效,代码更干净。当然,如果你想让它们“可选”,或者如果你需要一个大数组,从堆中分配会更合理

标签: c++ class pointers constructor


【解决方案1】:

在内存管理方面没有普遍的“更好的做法”,因此您应该为您的特定设计做正确的事情。

如果您始终精确分配 16 个浮点数,则将数组嵌入类中将减少对动态分配器的调用次数。当对象存储在自动存储器中时,这可能会有所帮助,但在某些情况下它可能会造成伤害。例如,如果您在自动存储中创建此类的大型数组,则嵌入数组会增加堆栈溢出的机会。

最好的方法是分析您的内存使用情况和时间,并查看分配这些数组是否会导致显着减慢或显着导致内存碎片。如果目前的方案没有给你带来任何麻烦,那就没有理由更换它。

【讨论】:

    【解决方案2】:

    如果你知道你正好需要 16 个浮点数并且这个数字不太可能改变,那么你应该使用这个:

    struct MyClass
    {
        ....
        float       myData[16];
    };
    

    使用这种简单的设计并没有错。如果数组的大小因一种情况而异,那么最好使用以下内容:

    template <int _len_data>
    struct MyClass
    {
        ....
        float       myData[_len_data];
    };
    

    之后你可以定义变量,比如:

    MyClass<16> a1;
    MyClass<64> a2;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 2020-07-02
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多