[英]c++ an array of pointers to a class, initialize to null pionters
我正在学习c ++和OOP,我有一个名为“ Pion”的类,有一个“ Chessboard”类,在“ Chessboard”类中,需要声明一个指向“ Pion”类的二维指针数组并将其初始化为NULL指针。
我知道如何声明2d数组,但不知道如何将其初始化为NULL指针。
声明2d数组应该是这样的:Pion * P [8] [8];
但是我没有将其设置为null指针。
欢迎任何帮助/提示。
[编辑]
感谢所有的答案/提示,但我仍然感到困惑。 所以我有一个叫做Chessboard的类,我需要创建一个链接到“ Pion”类的2d指针数组,该数组需要是一个类成员并将其初始化为NULL指针。
所以我尝试了一些东西,我想出了这个
在.h(头文件)中,我声明了一个私有成员类
介子* P [8] [8];
在构造函数中,我已经把这个
for (int x = 0; x < 8; ++x) {
for (int y = 0; y < 8; ++y) {
m_velden[x][y] = NULL;
}
}
这似乎正在工作,但我不确定这是否是最佳解决方案
它取决于P是局部变量还是类成员。 在第一种情况下,您可以在声明时将所有元素初始化为NULL
Pion *P[8][8] = {};
在第二种情况下,在Chessboard
构造函数的初始化列表中使用P()
。
有几点建议:首先,多维数组在C ++中很少值得麻烦。 最好使用一维数组,然后编写一个接受一行和一列并返回对该逻辑位置上元素的引用的函数。 一维数组更易于处理。
其次,最好使用std::array
而不是固定大小的C样式数组。 使用std::array
没有任何开销,它提供了许多免费的好处。
第三,您应该考虑使用智能指针(例如std::unique_ptr<Pion>
以确保对动态分配的对象进行正确的所有权和生存期管理(假设它们是动态分配的)。 (当然,您还应该确保确实需要使用指针:如果可以避免使用指针,并且仅将Pion
对象按值存储在数组中,它就足够了,并且会简单得多。这是否有意义取决于您的特定用例。)
考虑到这三个建议,您最终可能会看到以下内容:
class Chessboard
{
std::array<std::unique_ptr<Pion>, 64> _pions;
};
尝试这个:
for(int i = 0; i < 8; ++i)
{
for(int j = 0; j < 8; ++j)
{
P[i][j] = NULL;
}
}
要考虑的另一种选择是向量,它们对于动态调整数组的大小非常有用,特别是对于类的“数组”特别有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.