私はまだc++を学んでいるので、我慢してください。ブーストファイルシステムパスの周りに単純なラッパーを書いています-一時的な文字列を返す際に奇妙な問題が発生しています。これが私の単純なクラスです(これは正確ではありませんが、かなり近いです):
typedef const char* CString;
typedef std::string String;
typedef boost::filesystem::path Path;
class FileReference {
public:
FileReference(const char* path) : mPath(path) {};
// returns a path
String path() const {
return mPath.string();
};
// returns a path a c string
CString c_str() const {
return mPath.string().c_str();
};
private:
Path mPath;
}
以下の小さなテストコードで:
FileReference file("c:\\test.txt");
OutputDebugString(file.path().c_str()); // returns correctly c:\test.txt
OutputDebugString(file.c_str()); // returns junk (ie îþîþîþîþîþîþîþîþîþîþî.....)
これは一時的なものに対処する必要があると確信していますが、なぜそうなるのか理解できません。すべてが正しくコピーされているべきではないでしょうか。