-7
普通のポインタchar *
、char *
をboost::shared_ptr
に変換する方法はありますか?char *をboost :: shared_ptrに変換する方法は?
char *str = "abcdfg";
boost::shared_ptr<char> ss = ?(str);
普通のポインタchar *
、char *
をboost::shared_ptr
に変換する方法はありますか?char *をboost :: shared_ptrに変換する方法は?
char *str = "abcdfg";
boost::shared_ptr<char> ss = ?(str);
文字列リテラルを共有ポインタに変換することはできません。
const char *str = "abcdfg";
boost::shared_ptr<char> ss(str);
さて、これはコンパイルしますが、str
が動的に割り当てられたメモリではありませんので、それは深刻な問題が生成されます:私はちょうどあなたのコードを「修正」した後、あなたが残っているしているすべての未定義の動作でみましょう。共有ポインタが破棄されるとすぐに、未定義の動作が発生します。
あなたは、その文字列をしたいのであれば、あなたが最初にそれをコピーする必要があります:
const char *str = "abcdfg";
boost::shared_ptr<char> ss(new char[std::strlen(str)+1]);
std::strcpy(ss.get(), str);
しかし、あなたはただ、なぜ最初にstd::string
を使用しないで、文字列にRAIIのセマンティクスを持つためにこれをやっている場合場所?
std::string sss(str);
*手順*をお読みになりましたか? http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/shared_ptr.htm – Galik
'shared_ptr'が文字列リテラルを削除しようとすると、どうなると思いますか? – Ari0nhh