STLのvectorのemplace_backを使うと要素の追加時にコンストラクタで初期化できる。 しかし、コンストラクタとデストラクタで副作用のある処理をしている場合、注意が必要だ。 以下のようなコードはうまく動作しない。 #include <iostream> #include <vector> using namespace std; class A { public: A(const size_t size_) : size(size_), a(new int[size_]) { cout << "create " << size << endl; } ~A() { cout << "delete " << size << endl; delete[] a; } private: size_t size; int* a; }; int main() { vector<A> vec;