我有一个名为BET
的C ++类。它是二进制表达式树的类。以下是相关功能和成员数据:
class BET{
....
private:
struct BinaryNode {
string element;
BinaryNode *left;
BinaryNode *right;
BinaryNode(const string &e, BinaryNode *l = NULL, BinaryNode *r = NULL) : element(e), left(l), right(r) {}
};
BinaryNode *root;
BinaryNode * clone(BinaryNode *t) const;
};
const BET & BET::operator=(const BET &rhs) {
(*this).root = clone(rhs.root);
return *this;
}
....
BET::BinaryNode * BET::clone(BinaryNode *t) const {
if(t == NULL) {
return new BinaryNode(NULL);
}
BinaryNode * temp = new BinaryNode(t->element);
temp->left = clone(t->left);
temp->right = clone(t->right);
return temp;
}
我遇到clone()
总是返回NULL BinaryNode
的情况,因为rhs.root
指针在传递时设置为0。我已核实rhs.root
是operator=()
中的有效地址。
可能导致这种情况的原因是什么?