为了成为一名更有能力的 C++ 程序员,我正在尝试使用引用。过去,我通常在引用对象时使用指针,例如在 Objective-C 中。
所以我一直在编写一个存储Term对象列表的多项式类
(TermNode* termHead,termTail)
但是,当我尝试使用列出的第一个实现将术语添加到列表中时,在 add term 中调用 Term 上的构造函数时,会覆盖先前创建的 Term 节点中的 Term& 引用,就好像它使用了上一次调用中的this指针构造函数。
列出的第一个实现在技术上存在什么问题,导致其行为异常?即使我没有更改 TermNode 的结构,它也仅在我使用指针和new时才有效。
struct TermNode {
    Term& value;
    TermNode* next;
};
Term::Term(int coefficient,int firstTermDegrees,int secondTermDegrees) {
        this->coefficient = coefficient;
        this->xDegree = firstTermDegrees;
        this->yDegree = secondTermDegrees;
    }
//Doesn't work
void Polynomial::addTerm(int coefficient, int xDegree, int yDegree) {
    Term term(coefficient,xDegree,yDegree);
    addTerm(term);
}
void Polynomial::addTerm(Term& term) {
    TermNode* t = new TermNode{term,nullptr};
    if(isEmpty())
    {
        termHead = t;
        termTail = t;
    }
    else
    {
        termTail->next = t;
        termTail = termTail->next;
    }
}
//Does work
void Polynomial::addTerm(int coefficient, int xDegree, int yDegree) {
    Term* term = new Term(coefficient,xDegree,yDegree);
    addTerm(term);
}
void Polynomial::addTerm(Term* term) {
    TermNode* t = new TermNode{*term,nullptr};
    if(isEmpty())
    {
        termHead = t;
        termTail = t;
    }
    else
    {
        termTail->next = t;
        termTail = termTail->next;
    }
}
bool isEmpty() {
return nullptr == termHead;
}