将功能参数添加到向量
Adding function parameters to a vector
来自Java背景我与C 允许按值传递对象的方式相混淆。我对何时按值传递对象有一个概念上的疑问:
void add_to_vector(vector<SomeClass>& v, SomeClass var) {
v.push_back(var);
}
这在概念上是正确的吗?这就是为什么我觉得这是错误的:var
按值传递,并且该对象的内存将在函数调用的堆栈上分配。然后将其添加到向量。在函数调用结束时,将清除堆栈,因此var
引用的对象也将被清除。因此,向量现在将包含一个函数调用后不再存在的对象。
我想念什么吗?
您错过了 value语义的强大概念。就像var
是该函数中的本地副本一样,std::vector
的设计使得在v.push_back(var);
之后,v
持有var
的A 副本。这意味着可以使用v
的元素,而不必担心它们来自哪里(除非SomeClass
具有带有参考语义的成员,或以某种方式或其他触摸共享状态。(
是的,您缺少C 值语义。在Java中,向量仅保存对象引用,对象值本身位于堆上,不再使用时收集。在C 中,向量持有对象值,因此实际上始终将其独立于函数本地的私人价值保存其自己的私人价值。即使您通过引用通过VAR,Vector也会拥有自己的私人副本。将它们视为深副本。
您可能需要在此处 push_back(std::move(var))
btw,当通过示例中通过值传递var时,如果您不打算在push_back之后使用该值。
相关文章:
- 有没有办法向这个向量添加元素?
- 这种方式是否可以接受向向量添加unique_ptr?
- 向向量添加元素
- 无法向向量添加回调
- 如何将向量添加到结构中以创建一个库存系统,在该系统中,我可以仅使用一个结构向系统添加多种不同的葡萄酒
- 在一个类中向向量添加元素不适用于其他类
- 以下向 c++ 向量添加元素的方法有什么区别
- 我可以在不推送向量的情况下向向量添加值吗?
- 向向量C++添加对
- 使用单词键将多个行号的向量添加到我的地图中
- 在C++中向指针数组中的向量添加元素
- 要创建一个一开始没有特定维度的类Vector,请在类中创建一个方法,允许向向量添加维度
- 一次向 C++ 向量添加多个元素
- STL - 向存储在 STL 映射中的向量添加值
- 向向量添加向量
- 如何向结构类型的向量添加点
- 为什么我的课'当我向向量添加实例时,会调用s析构函数
- 向c++向量添加新字段
- 在c++中向向量添加对象vs向向量添加指针
- 当Type为unique_ptr时,为向量添加运算符[]