传递对变量的引用

Passing a reference to a variable

本文关键字:引用 变量      更新时间:2023-10-16

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

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

_str( str )

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