C ++ <type> *&amp;在类函数或结构错误</type>中

时间:2013-03-06 23:52:02

标签: c++ pointers operator-keyword

以下是我的代码的一部分:

class Node{
   public:
   Node* parent;
   Node* left;
   Node* right;
   int key;
};

(...)

/*
* Ps.: v1 is parent of v2!
* and assume that v1->parent is NULL
*/
void somefunction(Node*& v1,Node*& v2){
    (...)
    v2->parent = v1->parent; // The problem is here, more details below
    (...)
}

问题是当我调用v2->parent时,由于<type>*&参数中的somefunction(),编译器会解释v2->parent等于v1(谁是v2的父亲),它将v1修改为NULL,但我只想修改v2->parent值,而不是v1

PS:我需要在代码下面的某些部分使用<type>*&,我不能只修改参数类型。

1 个答案:

答案 0 :(得分:3)

好像你可能正在调用这样的函数:

somefunction(v2->parent, v2);

这意味着函数内的v2->parent与函数内的v1正好相同。当您将v2->parent设置为v1->parentNULL)时,您也正在修改v1

你说你不能修改参数类型,但我建议你这样做。引用指针是一个非常糟糕的迹象。您的代码似乎需要重新设计。

另一种方法是在将v2->parent传递给函数之前复制Node* v1 = v2->parent; somefunction(v1, v2);

v1

现在,函数内的v2->parent是{{1}}的副本,并且不会修改原始文件。