我收到错误stack around variable dlgFile is corrupted
我正在尝试修复。这是遗留代码,看起来很可疑。我替换了另一个项目的一部分:
void CPlantDlg::OnBnClickedButtonTestReference()
{
CString str = _T("Hello string");
{ // intentional so destructor of Tester is called below
Tester tester( str );
}
AfxMessageBox (str );
}
Tester类是:
class Tester
{
public:
Tester(CString & str);
~Tester(void);
CString _str;
};
Tester::Tester(CString & str) : _str( str )
{
}
Tester::~Tester(void)
{
//_str = "Changed"; // say I do this, what will be printed in caller function?
}
以这种方式传递CString是否安全?我认为Tester
类应该销毁它的_str
,这会导致原来的str在类外被销毁?
当我运行它时会提示“Hello String”。
如果我启用_str = "Changed"
您希望提示什么?它实际上仍然显示原始字符串。它是通过引用传递的,为什么会这样?
答案 0 :(得分:3)
Tester类中的_str变量是CString对象的实例。当成员初始化程序说
时_str( str )
它不存储对传递给构造函数的CString引用的引用,正在调用复制构造函数,并且使用与str相同的值初始化_str。这只是一个副本。因此,更改它不会对原始CString产生影响。