ありがとうございます。

vector<string*> vec2;
vec2.clear();
vec2.push_back(&foo);

cout << (*vec2[0] == foo) << endl;
=> 1
cout << (vec2[0] == &foo) << endl;
=> 1
cout << *vec2[0] << endl;
=> ふー!

確かに意図どおりに動きました。

しかし、vector#push_back()はconst <T>& を引数に取るので、
私はてっきり、渡したインスタンスがそのまま登録されると思っていました。
そのままか、コピーなのか、見分ける方法はないのでしょうか?