在下面的C ++代码中,每次调用此函数时,多次调用Position::left()
会导致为Node
指向的v->left
创建多个对象吗?这种内存效率高还是有更好的方法来做到这一点?
struct Node { // a node of the tree
Elem element; // element value
Node* par; // parent
Node* left; // left child
Node* right; // right child
Node() : elt(), par(NULL), left(NULL), right(NULL) { } // constructor
};
class Position {
private:
Node *v;
public:
Position(Node *_v = NULL) : v(_v) {}
Elem &operator*() { return v->element; }
Position left() const { return Position(v->left); }
}
答案 0 :(得分:0)
Position::left
由于使用v->left
而不检查是否为空,因此只要被调用,它就会继续。因此,性能比安全性更不重要。
也就是说,您的class Position
在struct Node
上做的很少。它似乎不必要(并且实际上最终隐藏了par
之类的字段)。
您要在这里完成什么?