关注C++细节——含有本类对象指针的类的构造函数、析构函数、拷贝构造函数、赋值运算符的例子

本例只是对含有本类对象指针的类的构造函数、析构函数、拷贝构造函数、复制运算符使用方法的一个简单示例,以加深对构造函数和拷贝控制成员的理解。


读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;

		
		//左侧的对象因为要被覆盖,所以记得如果左侧对象中的指针已经保持有对象,要记得释放资源,
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值