C ++参考和退出范围

问题描述 投票:1回答:2

我正在处理C ++中的引用,并且在引用和作用域周围有一个小查询,为此,最好创建一个示例:

想象一下我在“ BankDatabase.cpp”中有一个方法,该方法通过引用获取一个银行记录,并将其添加到数据结构中(也通过引用)。

void AddRecord( BankRecord& bankRecord )
{
    //Add record to data structure by reference
}

如果我运行这样的方法:

void TestAddRecord( BankDatabase& bankDatabase )
{
    BankRecord bankRecord { "John", "Doe", 9999 }
    bankDatabase.AddRecord( bankRecord );
}

[在我看来,“ bankRecord”不在范围内(它的两个字符串和int也是如此),因此在“ TestAddRecord”方法的末尾从内存中清除了,而“ bankDatabase”指向了一些空的内存?

如果是这样,这种情况的公认标准/解决方案是什么?这似乎有点疯狂有按值传递的东西...

c++ pointers memory memory-management scope
2个回答
1
投票
在那种情况下,按价值传递似乎是必经之路。分配新的BankRecord指针也将起作用。通过引用存储内容不是很好。

但是,如果我没有记错的话,您的两个字符串和int不会丢失,因为它们存在于堆栈中并且不会被释放。但是bankRecord仍然会丢失。


0
投票
回答这些问题的最佳方法是在调试器中逐步执行代码,并查看Vector在添加变量后的作用。踏入数据结构的Append函数时,请特别注意构造函数调用。因为我不知道您的基础数据结构,所以要告诉您更多信息要困难一些。我会假设它现在是一个std :: vector,直到另行告知。
© www.soinside.com 2019 - 2024. All rights reserved.