本例只是对含有本类对象指针的类的构造函数、析构函数、拷贝构造函数、复制运算符使用方法的一个简单示例,以加深对构造函数和拷贝控制成员的理解。
读C++ primer 5th 第13章后加上自己的理解,完整的写了下课后习题的代码。
第一版:
#include <string>
#include <iostream>
using namespace std;
class TreeNode{
private:
string value;
TreeNode *left;
TreeNode *right;
public:
TreeNode() : value(""), left(nullptr), right(nullptr){}
~TreeNode(){
cout << "~TreeNode()" << endl;
if (left != nullptr){
delete left; //递归析构左子树
}
if (right != nullptr){
delete right;//递归析构右子树
}
}
TreeNode(const TreeNode &tn) : value(tn.value), left(nullptr), right(nullptr){
if (tn.left != nullptr){
left = new TreeNode(*tn.left);//递归复制拷贝左子树 (其实又一次调用了以(*tn.left)作为参数的复制构造函数)
}
if (tn.right != nullptr){
right = new TreeNode(*tn.right);//递归复制拷贝右子树 (其实又一次调用了以(*tn.left)作为参数的复制构造函数)
}
}
TreeNode & operator=(const TreeNode& tn){
value = tn.value;
TreeNode * pl, *pr;
//左侧的对象因为要被覆盖,所以记得如果左侧对象中的指针已经保持有对象,要记得释放资源,