標準のC++では、Fooのコンストラクターを作成する必要があります。
struct Foo {
Foo(int const a, std::initializer_list<char> const b, short* c)
: x(a), y(c) {
assert(b.size() >= 24, "err");
std::copy(b.begin(), b.begin() + 24, array);
}
~Foo() { delete y; }
int x;
char array[24];
short* y;
};
class Bar {
Bar() : x(5), foo(5, {'a', 'b', ..., 'y', 'z'},
new short(5)) { }
private:
int x;
Foo foo;
};
C ++ 0xでは、統一された初期化リストを使用できますが、それでもFooにはdtorが必要です。
class Bar {
Bar() : x(5), foo{5, new char[24]{'a', 'b', ..., 'y', 'z'},
new short(5)} { }
~Bar() { delete[] foo.array; delete foo.y;}
}
private:
int x;
Foo foo;
};
デフォルトで初期化するにはfoo
(としてBar() : foo(), x(8) { }
)、Fooにデフォルトのコンストラクターを与える必要があります。