use*_*084 3 c++ memory arrays dynamic
我试图动态地将2d数组分配给构造函数初始化中的指针.
FooBar::FooBar()
: _array( new int[10][10] )
{ }
int **_array;
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我知道多维数组的分配有点不同.是否有人能够通过解释详细说明这一点?
提前致谢.
这里的一些答案说二维数组是指向其他数组的指针数组.那不是真的(存储指针的地方,如果你分配的只是数组的数据!?).相反,二维数组是其他数组的数组.因此,您必须更改成员的类型:
FooBar::FooBar()
: _array( new int[10][10] )
{ }
int (*_array)[10];
Run Code Online (Sandbox Code Playgroud)
那是因为new[]返回一个指向创建的数组的第一个元素的指针.此元素是10个整数的数组,因此成员类型更改.如果语法让你害怕,请使用temlate简化它(此模板相当于boost::identity).
template<typename T> struct identity { typedef T type; };
FooBar::FooBar()
: _array( new int[10][10] )
{ }
identity<int[10]>::type *_array;
Run Code Online (Sandbox Code Playgroud)
这有效地像就地typedef一样工作.当然,就像任何使用一样new[],它需要delete[]在析构函数中正确放置并在对象被销毁时调用.
由于new[]分配了一个在编译时已知类型的元素数组,因此只能将第一个(最外部)维度设置为运行时值 - 所有其他维度必须在编译时具有已知值.如果这不是你想要的,你将不得不分配一个指针数组,就像其他一些答案所说的那样.
但请注意,为避免进一步混淆,那些不是多维数组.它们是指针的一维数组,恰好指向其他一维数组.