2016-11-26 4 views
0
const char* s = std::string("text").c_str(); 
std::cout << s << std::endl; //This will print nothing because the data 
          //isn't available any longer 

std::string::c_str()は、格納されたデータへのポインタを返します。 実際にstd::string("text")は使用している間だけ使用できます(たとえば、他のインスタンスを初期化するときに使用します)。最後にデストラクタが呼び出され、が何も指さないデータが削除されます。string.c_str()のようなrvalueでconst char *を初期化することはできますか?

私の質問は、デストラクタによって削除されていないどこかでデータを移動する方法がある場合です。const char*がそれを指すことができます。あるいは、他の何かがstd::stringのデータを指しているので、それがまだ削除されていないことを知っている共有スマートポインタのようなものを使うのであれば、それは可能です。

どこかにデータをコピーして、それを指しているのは私が探しているものではありません。

答えて

1

内部で参照カウントポインタを使用する文字列を作成することはできません。データへのポインタを使用する場合は、文字列が存続することを確認する必要があります。唯一の選択肢は、データを別の文字列オブジェクトにコピー/移動することです。

関連する問題