【问题标题】:Dynamic Array in c++ header fileC++头文件中的动态数组
【发布时间】:2012-12-16 06:58:33
【问题描述】:

我的 cpp 项目在头文件中有静态二维数组,但它会导致 chkstk 错误。我想让它动态化。是否真的可以在标题中进行更改,因为对项目的所有部分(大约 12000 行代码)进行更改是很困难的。

【问题讨论】:

  • 使用单例模式创建一个类,为您提供数组实例。

标签: c++ dynamic multidimensional-array


【解决方案1】:

根据Dietmar's answer on a similar problem,很可能您需要将静态二维数组放入一个函数中,以便及时初始化。

像这样:

double**& my_array()
{
  static double** local = NULL;
  if(!local)
  {  
     // init your array here
  } 
  return local;
}

并且您需要在代码中引用您的数组,例如 my_array() 而不是 my_array

编辑:

对于icepack 的问题:是的,它看起来很奇怪(在我看来,无论如何都应该将多数组包装到一个类中,这样就不会发生)。使用这种奇怪的返回类型的原因如下:

// if you returned double** instead of double**&
my_array() = other_array; // would overwrite a temporary pointer
my_array(); // would be still the old array

如果你使用 C++11,最干净的解决方案是:

typedef std::array<std::array<double, second_dim>, first_dim> my_array_t;
my_array_t& my_array()
{
   static my_array_t local = initial_value();
   return local;
}

你使用my_array和以前一样,使用my_array()

即使你不使用 C++11,我也建议你定义自己的 2d_array 类,无论如何,只要你写得好,它就不会比 C 数组产生任何开销。

【讨论】:

  • double**&amp; ?怎么回事?这样的代码不应该由任何体面的程序员创建。
  • @icepack:我同意这很奇怪,请在更新的答案中查看我的解释。
猜你喜欢
  • 2017-06-06
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多