简单的C++基础类的构造,该如何解决

简单的C++基础类的构造
刚学完类,对类的复制控制以及动态内存的使用还不是很清楚,下面自己编了一个树的类,请大家帮忙看看有什么使用不当的地方,如果有什么好的建议也请不吝赐教

#include <string>
using namespace std;

class TreeNode {
private:
string value;
TreeNode *left;
TreeNode *right;
public :
TreeNode(string ss) value(ss) {}
TreeNode(const TreeNode &orige)
value(orige.value),
left(new TreeNode (*orige.left)),
right(new TreeNode (*orige.right))
{}
TreeNode& operator=(const TreeNode&);
~TreeNode() { delete left; delete right;}
void insert_left(const TreeNode &tree)
{ left = &tree;}
void insert_right(const TreeNode &tree);
{ right = &right;}
void del_left(TreeNode &root) //删除左子树
{ delete left;}
void del_right(TreeNode &root) //删除右子树
{ delete right;}
};

TreeNode& TreeNode::operator=(cosnt TreeNode& tree)
{
value = tree.value;
*left = *tree.left;
*right = *tree.right;
return *this;
}

我对复制控制的理解:
复制控制主要有两点,一个是复制构造函数,一个是等值重构函数(operator=),等我们返回一个类或者去赋值的时候,系统都是先用复制构造函数构造一个临时变量,然后如果有=号,再利用重构的等值函数去改变左值。



------解决方案--------------------
TreeNode(const TreeNode &orige);
TreeNode& operator=(const TreeNode&);

二者的参数都是指定const引用,因此没有临时对象,而是用传递对象直接给新的对象赋初值。
------解决方案--------------------
operator=需要判断自赋值的情况
另外建议按照C++11的标准增加转移构造和赋值
------解决方案--------------------
class TreeNode {
private:
string value;
TreeNode *left;
TreeNode *right;
public :
TreeNode(string ss) value(ss) {}
// 这里参数应该要用引用,也就是string&
// 初始化列表前面应该有冒号的,不知是不是楼主粘贴的时候忘了……
TreeNode(const TreeNode &orige)
value(orige.value),
left(new TreeNode (*orige.left)),
right(new TreeNode (*orige.right))
{}
TreeNode& operator=(const TreeNode&);
~TreeNode() { delete left; delete right;}
// delete了一个指针之后,应该再把该指针指向NULL
void insert_left(const TreeNode &tree)
{ left = &tree;}
void insert_right(const TreeNode &tree);
{ right = &right;}
void del_left(TreeNode &root) //删除左子树
{ delete left;}
// 传递的参数root好像没起作用啊~
void del_right(TreeNode &root) //删除右子树
{ delete right;}
};