std::vector の使い方

今まで vector はこんな感じに使っていた。

std::vector<std::string> list;
list.push_back(std::string("hoge"));
list.push_back(std::string("fuga"));

これはこれでよいのかもしれないけど、push_back した時点でコピーコンストラクタが呼び出されるので、無駄にふたつオブジェクトを作成して、即座に片方をデストラクトしていることになる。うーん、よく考えればそりゃそうだ。

こういう場合は

std::vector<std::string *> list;
list.push_back(enw std::string("hoge"));
list.push_back(new std::string("fuga"));

とすることで、オブジェクトがふたつ作られてしまうオーバーヘッドを回避できる。ただし、効率と引き換えに list 内のオブジェクトの解放を忘れないようにしなければならない。