【问题标题】:Should I use a constructor when size is known当大小已知时我应该使用构造函数吗
【发布时间】:2022-02-04 00:03:11
【问题描述】:

这两种实现有什么不同

//SIZE is known before runtime
class A{
   int* p1 = new int[SIZE];
}
class B{
   int* p1;
   B(){//Using constructor
   p1 = new int[SIZE];
   }
}

【问题讨论】:

  • 只有在你创建另一个构造函数并忘记初始化 p1 时才会出错。
  • 如果在运行前知道大小,最好使用数组或std::array。通过动态分配类打开a whole can of worms
  • 并使用 std::vector 即使已知大小。您可以在大多数编译器的调试模式下获得免费的生命周期管理和边界检查
  • @user4581301 If size is known before runtime you're better off with an array or a std::array 取决于已知大小。如果它很大,那么这样的成员就会有问题,因为创建类的自动变量很容易导致堆栈溢出。在这种情况下,动态数组更好。如果使用 RAII(例如std::vector),它不会打开一罐蠕虫。
  • 这会教我忽略 vector 以尽量保持评论简短。

标签: c++ performance dynamic


【解决方案1】:

这两个例子没有实际区别。

附:避免拥有裸指针。安全使用动态数组的最简单解决方案是std::vector

附言尽可能使用成员初始化器(例如第二个示例中的默认成员初始化器或成员初始化列表中的成员初始化器)来分配未初始化的成员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2012-06-05
    相关资源
    最近更新 更多