我需要初始化一个非常大的多维std::array数据:
class Thing;
class World
{
public:
World() : space{nullptr} {};
~World() = default;
private:
static unsigned int const size = 1000;
std::array<std::array<std::array<std::unique_ptr<Thing>, size>, size>, size> space;
};
Run Code Online (Sandbox Code Playgroud)
如果你试图实例化它,G ++ 4.8.2扼杀:它消耗所有可用的内存,不会返回.也就是说,编译器挂起,我永远不会得到可执行文件. 为什么是这样? 请注意,clang ++没有问题.
注意:我完全意识到将这么多数据放在堆栈上会溢出它. 在堆上初始化它的最佳方法是什么? 我认为制作space一个引用(分配内存)是最好的方法,但我无法弄清楚语法.
好吧,我无法解释为什么 g++ 对此感到困惑,但在你解决这个问题之前,请在你的成员声明中考虑这一点:
std::vector<std::array<std::array<std::unique_ptr<Thing>,size>,size>> space;
Run Code Online (Sandbox Code Playgroud)
并在构造函数初始值设定项列表中:
World() : space{size}
Run Code Online (Sandbox Code Playgroud)
这至少应该让你编译并将所有这些移动到堆中。注意:这最好是 64 位进程。我将不得不寻找为什么 g++ 正在做我怀疑它正在做的事情。
| 归档时间: |
|
| 查看次数: |
590 次 |
| 最近记录: |