グローバルなクラスがあるとします(たとえば、アプリのランタイムで利用可能)
class MyClass {
protected:
std::string m_Value;
public:
MyClass () : m_Value("hello") {}
std::string value() { return m_Value; }
};
MyClass v1;
最初のフォームを使用すると、私が行うときに奇妙な動作をします
printf("value: %s\n", v1.value().c_str());
printfが使用する前に、文字列がメモリから消えたように見えます。値を出力する場合もあります。それ以外の場合は、クラッシュするか、何も出力しません。
私が最初にそのように文字列をコピーした場合
std::string copiedString = v1.value();
printf("value: %s\n", copiedString.c_str());
物事はうまくいきます。
確かに、一時的な文字列でこれを回避する方法が必要です。
編集:したがって、コンセンサスはconst std :: string&returnvalueを使用することです。
元のコードは問題ないはずだと誰もが言っていることは知っていますが、WindowsCEでMSVC2005に問題が発生しているのを見たことがありますが、CEボックスでのみです。Win32クロスコンパイルではありません。