残念ながら、私が持っているドキュメントは、(a)エラーのない元の製品ドキュメント(MS VC ++ 6.0ヘルプファイル)または(b)後のMFCバージョンに適用される後のMSDNヘルプのいずれかです。
特に:
[Q1]オペレーター+=
はVC++6 MFCでバグがあることがわかっていますCString
か?VC ++ 6のこのコードは、最新のMFCアプリでコンパイルする前に修正する必要がありました。
CString szTemp;
unsigned char m_chReceive[MY_BUF_SIZE];
// compiles and seems to run but may be buggy in VC++6, won't compile in modern MFC
szTemp += m_chReceive;
// the above won't compile in modern MFC versions, but this "&+cast" does:
szTemp.Append( (const char *)&m_chReceive[0]);
[Q2]このように、関数の結果としてCStringを返すのは安全で堅牢ですか、それともメモリの破損を引き起こしますか?
CString MyClass:MyMethod(void)
{ CString Stuff;
// set a value to Stuff here.
return Stuff; // return a stack-allocated-CString
}
私はあちこちで上記の2つを使用し、ランダムなランタイムメモリの破損も示しているように見えるコードを持っています。これらの2つは私にとって危険信号です。CStringは、Visual C ++ 6.0のMFCの作成者によって、int
またはchar
型のように使用して関数から返すことができる単純なものとして意図されていたのではないかと疑っています。どういうわけか、コピーコンストラクタとメモリ管理はすべてうまくいきましたか?
明らかなこと: はい、もちろん、可能な場合はすべてのコードをVC ++ 6.0から削除しますが、最初にクラッシュしている本番システムにパッチを適用する必要があります。次に、このレガシーコードベースを前進させるという大きなタスクを開始できます。