无意中修改了对象的副本

Inadvertently modifying a copy of my object

本文关键字:副本 对象 修改 无意中      更新时间:2023-10-16

>我有一个函数,我在其中传递指向MyClass数组的指针,我想在函数中创建一个对象并将其存储在数组中。目前,我无意中修改了对象的副本,因此当函数返回时,MyClass 的数组不包含我所做的更改。我应该如何更改此设置?我认为一个简单的解决方法是将添加对象移动到最后的数组中,但是有什么方法可以修改对新创建的对象的引用吗?

void x(MyClass* a){
    //Create object on stack
    MyClass my_obj(30);
    //Add object to array
    a[30] = my_obj;
    //These changes don't get made because the object in the array is a copy
    //of the object I created on the stack.
    my_obj.datamember[0] = 3;
    my_obj.datamember[1] = 7;
    //The array is "returned" because I am passing by pointer
} 

请改用vector<MyClass>。 然后,您可以简单地执行以下操作:

a.push_back(my_obj);

a.erase(a.remove(/*...*/));