std::stringのコピーのコスト

今までstd::stringはそれぞれに独立した文字列のバッファを持っていて、
string同士のコピーは自分専用のバッファを確保してそこにコピーするもんだと思ってたけど、どうやら違うらしい。


参照カウントで管理された文字列バッファを別に持っていて、
std::string同士のコピーでは同じバッファを使う回すようになっているらしい。

string a( "Hello" );

string b( a ); // aとbは同じ実体を共有する

CoW(Copy on Write)っていうテクニックらしい。ふむふむ便利だ。


ところがVC7.1で検証してみたところ、なぜかstring b( a );でbは独自にバッファを確保してしまう。
VC7.1のstd::stringの実装ではCoWを行わないんだろうか。
実装眺めて検証したいけど眠気が・・・明日にしようかな。


ところでCoWについて疑問なこと。
自分に書き込みが行われたことをどうやって知るか。
非const関数を呼ばれた時点で書き込みが行われたとみなすしか無いのかな。