传递对变量的引用

时间:2014-06-10 19:41:41

标签: c++ mfc

我收到错误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"您希望提示什么?它实际上仍然显示原始字符串。它是通过引用传递的,为什么会这样?

1 个答案:

答案 0 :(得分:3)

Tester类中的_str变量是CString对象的实例。当成员初始化程序说

_str( str )

它不存储对传递给构造函数的CString引用的引用,正在调用复制构造函数,并且使用与str相同的值初始化_str。这只是一个副本。因此,更改它不会对原始CString产生影响。