我试图初始化相同类对象的指针数组。这是班级:
class Correspondent{
private:
static Correspondent *correspondent[maxCorrespondents];
}
我尝试了contsructor。但它每次都被初始化。
Correspondent::Correspondent(string n,string c) {
name = n;
country = c;
for(int i=0;i<=maxCorrespondents;i++){
correspondent[i] = NULL;
}
}
答案 0 :(得分:2)
在定义此变量的 one 翻译单元中:
erosed_leaf = imerode(leaf,SE);
contour = double(leaf) - double(erosed_leaf);
contour = double(~contour);
figure();
imshow(contour);
就是这样。此聚合初始化数组,然后默认初始化每个指针。由于指针是基本类型,因此将初始化为零,将它们全部设置为Correspondent* Correspondent::correspondent[maxCorrespondents]{};
。
答案 1 :(得分:1)
具有静态存储持续时间的对象始终为零初始化。因此correspondent
数组将填充零而无需编写任何其他代码。来自 [dcl.init] .10
在进行任何其他初始化之前,静态存储持续时间的每个对象在程序启动时都是零初始化的。
使用::std::array
包装器并引入类型别名以避免数组声明和定义中的重复也是一个好主意:
class Correspondent
{
private: using Correspondents = ::std::array<Correspondent *, maxCorrespondents>;
private: static Correspondents correspondents;
};
Correspondent::Correspondents Correspondent::correspondents;