これがコンパイルされて動作する理由:
class MyObject {
public:
MyObject() {}
};
struct ItemGood {
int Number;
MyObject *Object;
ItemGood(int Number, MyObject *Object) {
this->Number = Number;
this->Object = Object;
}
};
const ItemGood ItemGoodList[] =
{
{ 0, new MyObject() },
{ 1, new MyObject() }
};
そして、これはまったくコンパイルされません:
class MyObject {
public:
MyObject() {}
};
struct ItemBad {
int Number;
std::auto_ptr<MyObject> AutoObject;
ItemBad(int Number, MyObject *Object) {
this->Number = Number;
AutoObject = std::auto_ptr<MyObject>(Object);
}
};
const ItemBad ItemBadList[] =
{
{ 0, new MyObject() },
{ 1, new MyObject() }
};
コンパイラが吐き出すエラーは次のとおりです。
「ItemBad::ItemBad(ItemBad)」の呼び出しに一致する関数がありません
なぜ何かがそのコンストラクターを呼び出そうとしているのかわかりません。この初期化子リストで実際に何が起こっているのかわかりません。