请考虑以下示例
struct Foo
{
int bar;
Foo(int i):bar(i){cout << "real ctor\n";}
Foo(){cout << "default ctor\n";}
};
int main()
{
Foo fooArr[3];//default ctor called 3 times
for(int i=0;i!=3;++i)cout << fooArr[i].bar << endl;//bare memory junk
cout << endl;
vector<Foo> fooVec;
for(int i=0;i!=3;++i){
fooVec.push_back(Foo(i)); //only real ctor called
cout << fooVec[i].bar << endl;//real thing
}
cout << endl;
int iArr[3];
for(int i=0;i!=3;++i)cout << iArr[i] << endl;//bare memory junk
}
我不希望任何用户Foo
调用它的默认构造函数,因为它不在我的设计中。但我希望我的用户能够使用数组Foo
,为了支持这一点,我不得不提供一个毫无意义且令人困惑的 Foo::Foo()。我只是不明白为什么 C++ 标准强制程序员做这样的事情。其背后的原理是什么?为什么不一致?请问有哪位懂这个的聪明人给我解释一下吗?提前致谢!