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