通过引用传递数据成员

Passing data member by reference

本文关键字:数据成员 引用      更新时间:2023-10-16

如果我有这样的类(原谅粗略的语法):

class Z{
public:
    void method1();
    void method2(vector<X>& v);
    void method3(vector<X>& v);
private:
    std::vector<X> myvec;
}

基本上我想将myvec从method1()通过method2()传递到method3(),在那里它将被修改。如果我的方法 1() 看起来像这样:

void Z::method1(){
    vector<X> v = z::myvec;    //What do I have to do with this line so that the changes
    method2(v);                //made to v in method3() are permanent and not lost once
}                              //method1() returns?

void Z::method2(vector<X>& v){
    method3(v);
}
//Modify vector<X> myvec
void Z::method3(vector<X>& v){
    v.push_back(<something>);
}

如何更改 method3() 中的向量,以便一旦 method1() 返回,对向量所做的更改是永久性的并且不会丢失?

只需v引用:

vector<X>& v = myvec;

或者简单地传递myvec本身:

method2(myvec);

为什么不只允许 method3 直接使用类的成员数据?这是一件完全正常的事情。

void Z::method3(){
    myvec.push_back(<something>);
}

但是,如果您真的想按照自己的方式进行操作(我建议不要这样做,因为它太特殊了),请将您的第一行注释替换为

vector<X>& v = z::myvec; 
我不知道

你为什么想要这个流程,method1()-->method2()-->method3()。如果这不是故意的,您可以直接在method3()中使用数据成员myvec。但我相信情况并非如此,您必须使用它的用例。

对于另一种方式,您可以通过这种方式修改method1()。

void Z::method1(){
    method2(z::myvec);                
}

并保持函数的其余部分不变。

实际上,在您的 method1() 中发生的事情实际上是在创建新对象并传递带有引用的新对象,因此所有更改都是对该新向量而不是原始向量进行的。

vector<X> v = z::myvec;  // this creates new object.

您测试是使用调试进行的。

如果这回答了您的疑问,请告诉我。