我还在学习c++,所以请多多包涵。我正在围绕 boost 文件系统路径编写一个简单的包装器——我在返回临时字符串时遇到了奇怪的问题。这是我的简单课程(这不准确,但非常接近):
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 îþîþîþîþîþîþîþîþîþîþî.....)
我很确定这必须处理临时人员,但我无法弄清楚为什么会这样 - 不应该一切都正确复制吗?