【发布时间】:2015-08-07 08:08:48
【问题描述】:
我有一个接受 a 的函数
vector<vector<MyClass>>
并修改 MyClass 实例。自从我编写任何 C++ 以来已经有很长时间了,我很难记住在这里通过引用而不是通过值传递整个 arg 的内容是什么。
我原来的方法签名是:
void modifyVectorOfVectors(vector<vector<MyClass> > vec) { ... }
我想提高内存效率,所以我最初将其更改为:
void modifyVectorOfVectors(vector<vector<MyClass*> > vec) { ... }
然后我意识到这意味着我的 vec 值仍然会复制所有内部向量。所以我将我的函数签名更改为:
void modifyVectorOfVectors(vector<vector<MyClass*> >* vec) { ... }
这是否足够,或者我还需要做类似的事情:
void modifyVectorOfVectors(vector<vector<MyClass*>* >* vec) { ... }
有人可以强调所有这些之间的记忆差异吗?非常感谢!
【问题讨论】:
-
你为什么不直接引用向量的向量呢?这种方式没有内存泄漏
-
使用 typedef 可能会更清楚
-
如果使用现代 c++ 那么
using会更好:)
标签: c++ vector pass-by-reference pass-by-value pass-by-pointer