std::vector::push_back 的问题

Problems with std::vector::push_back

我在 C++ 中遇到 std::vector::push_back 的一些意外行为。我有以下伪代码,我希望它足够清楚以证明我所看到的问题:

MyClass* myClass = new MyClass();
std::vector<MyObject*> newObjects;
myClass->VectorOperation(oldObject, newObjects);

MyClass::VectorOperation(MyObject* oldObject, std::vector<MyObject*> newObjects)的操作应该如下:

void MyClass::VectorOperation(MyObject* oldObject, std::vector<MyObject*> newObjects)
{
    if (// Some condition on oldObject)
    {
        newObjects->push_back(oldObject);
    }
    else
    {
        // Operations that can result in translating a single oldObject into many MyObjects, e.g.
        MyObject* newObject1 = new MyObject();
        MyObject* newObject2 = new MyObject();
        newObjects->push_back(newObject1);
        newObjects->push_back(newObject2);
    }
}

我看到的问题是,在 VectorOperation 中的 if 语句成功执行后,newObjects 向量为空,即 newObjects 向量应该有一个对应于 oldObject 的条目。我对 C++ 比较陌生,但我不确定我在这里遗漏了什么。非常感谢任何帮助。

谢谢!

编辑: 我输错了方法签名。应该是:

void MyClass::VectorOperation(MyObject* oldObject, std::vector<MyObject*>* newObjects)

添加&:

void MyClass::VectorOperation(MyObject* oldObject, std::vector<MyObject*>& newObjects) {
//                                                                       ^
    if (// Some condition on oldObject)
    {
        newObjects.push_back(oldObject);
//                ^ Guess you meant . instead of ->.
    }
    ...
}

现在,当您传递 newObjects 矢量时,您会复制它,因此 push_back 恰好是复制的矢量,而不是原始矢量。如果您添加 &,您将通过引用传递 newObjects,因此向量不会被复制并且 oldObject 将被推回原始向量。