c++ - 如何返回向量的常量引用?
问题描述
我有以下设置:
啊
class A
{
public:
...
const std::vector<int>& getSomeData() const;
private:
std::map<SomeIdType, std::shared_ptr<SomeDataType> > m_someDataCollection;
}
A.cpp
const std::vector<int>& getSomeData(SomeIdType id) const
{
std::vector<int> rVal;
auto it = m_someDataCollection.find(id);
if (it != m_someDataCollection.end())
{
std::shared_ptr<SomeDataType> someData = it->second;
rVal = someData->getSomeDataVector(); // returns std::vector<int>
}
return rVal;
}
int main()
{
SomeIdType id;
A a;
...
const std::vector<int>& data = a.getSomeData(id);
}
有一个对A.cpp中返回的局部变量的引用。
我不希望返回的向量A::getSomeData()
在外部被操纵。
我怎样才能实现这个目标,而不必返回对A.cpp中的局部变量的引用?
解决方案
如何返回向量的常量引用?
- 通过在函数以外的地方创建向量。由于在这种情况下它是一个成员函数,一个选项是返回对成员的引用。或者向量可以通过参数传递给函数。
- 或者通过使用静态局部变量。在这种情况下,函数的所有调用都将返回相同的向量。
任何非静态局部变量都不希望 A::getSomeData() 返回的向量在外部被操作。e 具有自动存储,因此仅在函数结束之前存在。对此类变量的返回引用将引用已破坏的向量。
也就是说,从您的示例看来,您可能应该按值返回向量,而不是尝试返回引用。
我不希望 A::getSomeData() 返回的向量在外部被操纵。
你没有给出你想要那个的理由。你为什么要关心调用者对你返回的向量做了什么?
推荐阅读
- android - INCORRECT_APP_CREDENTIALS 这里映射 android
- video - 使用 ffmpeg 进行 AVI 压缩,同时保持 alpha 通道,用于 Adobe Premiere
- html - 悬停在菜单中时如何修复小空间?
- reactjs - 使用子/父组件反应受控表单
- python - Pytube 错误。AttributeError:“NoneType”对象没有属性“下载”
- node.js - 向 SQS AWS 上的队列发送消息时出错
- python - 在 Pygame 中移动后删除图片
- delphi - 如何使用 IHTMLDocument2 在 TWebBrowser 中拖动 HTML 元素
- excel - Excel VBA:在运行时生成和删除文本框
- javascript - 如何在数据表中的单个列内呈现多个值