NodePtr(T *n = 0): node(n) { }
NodePtr(const NodePtr &p): node(clone(p.node)) { }
NodePtr &operator=(const NodePtr &p) { delete node; node = clone(p.node); return *this; }
NodePtr(T *n = 0): node(n) { }
NodePtr(const NodePtr &p): node(clone(p.node)) { }
NodePtr &operator=(const NodePtr &p) { delete node; node = clone(p.node); return *this; }