C++ Primer 学习笔记_57_类与数据抽象 --管理指针成员(三)

2014-11-24 12:26:58 · 作者: · 浏览: 6
; return *this; }

即使要将一个对象赋值给它本身,赋值操作符也必须总是保证正确。本例中,即使左右操作数相同,操作本质上也是安全的,因此,不需要显式检查自身赋值。


//P427 习题13.26、27
//请参照前面的代码与解析,在此就不再赘述了,O(∩_∩)O谢谢


//习题13.28
//(1)
class TreeNode
{
public:
    TreeNode():count(0),left(0),right(0){}
    TreeNode(const TreeNode &node):value(node.value),count(node.count)
    {
        if (node.left)
        {
            left = new TreeNode(*node.left);
        }
        else
        {
            left = 0;
        }

        if (node.right)
        {
            right = new TreeNode(*node.right);
        }
        else
        {
            right = 0;
        }

    }
    ~TreeNode()
    {
        if (left)
            delete left;
        if (right)
            delete right;
    }

private:
    std::string value;
    int count;
    TreeNode *left;
    TreeNode *right;
};

//(2)
class BinStrTree
{
public:
    BinStrTree():root(0) {}
    BinStrTree(const BinStrTree &node)
    {
        if (node.root)
            root = new TreeNode(*node.root);
        else
            root = 0;
    }
    ~BinStrTree()
    {
        if (root)
            delete root;
    }

private:
    TreeNode *root;
};