通过引用传递数据成员

时间:2013-10-02 20:02:13

标签: c++ reference stack pass-by-reference

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

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

private:
    std::vector<X> myvec;
}

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

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()返回,对向量所做的更改是永久性的而不会丢失?

3 个答案:

答案 0 :(得分:3)

只需将v作为参考:

vector<X>& v = myvec;

或简单地传递myvec本身:

method2(myvec);

答案 1 :(得分:2)

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

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

但如果你真的想按照自己的方式去做(并且我会反对它,因为它是如此特殊),用

替换你的第一个评论行
vector<X>& v = z::myvec; 

答案 2 :(得分:1)

我不知道你为什么要完全想要这个流程,method1() - &gt; method2() - &gt; method3()。如果这不是故意的,你可以在method3()中直接使用数据成员myvec。但我确信情况可能不是这样,必须有一个用例,因为你正在使用它。

换句话说,你可以用这种方式修改method1()。

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

并保持其余功能。

实际上你的情况是在你的method1()中你正在创建新对象并通过引用传递新对象,所以所有的更改都是对新的向量而不是原始向量进行的。

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

你的测试是调试。

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