c++ - 使用指向向量中元素的指针是否危险?
问题描述
我有一个向量,里面装满了对象:
std::vector<MyClass> vec;
vec.push_back(MyClass("Hi", 10)); //example, could be any class
后来,当它被填满时,我想访问它:
for(unsigned int i = 0; i < vec.size(); i++)
{
MyClass *c = & vec.at(i); // <--- HERE
if(c) // <--- AND HERE
{
c->memberOfMyClass = x;
}
}
使用 c 比直接使用 vec.at(i) 更危险吗?我需要 if(c) 的保护吗?c可以是nullptr吗?我猜不,因为向量确实接受对象,而不是指向对象的指针。
解决方案
您获取的指针&
不能为空,因此没有危险,也没有检查的意义。
(您可能正在考虑,如果向向量添加或删除元素,指向元素的指针可能会变得无效,但它永远不会变为空,并且您无法检测到这一点。)
在这种情况下使用引用是很常见的:
MyClass& c = vec.at(i);
c.member = x;
但是对于您的特定循环,请考虑使用范围循环:
for (auto& c : vec)
{
c.member = x;
}
推荐阅读
- python - 无法将 json 文件加载到 Google Colab
- python-3.x - 如何修复 Python3 中的“呼叫不成功”facebook 营销 api 错误
- python - 如何在 python 中使用 write() 将文档字符串写入文件?
- python - Pandas Dataframe 在添加具有对象 dtype 的行时非常慢
- gridview - 页面更改事件上显示的空数据文本
- r - 无法通过 shinyapps.io 连接到 ODBC
- c# - 如何在单个连接中使用 2 个数据源
- node.js - “npm start”启动时出错
- javascript - node-imap,邮件事件在收到多封电子邮件时不起作用
- c# - SqlDataReader.ExecuteReader(); 即使提供了所有参数,也返回空对象