C++类中指针成员的管理:
有三种解决方案:
1.全部用值类型指针:
优点:可以很安全而且简单。
缺点:占用大量的内存,并且内存CPY运算量巨大。
方法:写如下几个函数:
复制构造函数。
析构函数。
赋值控制函数。
2.全部用指针类型:
优点:简单而且高效。
缺点:很复杂。
方法:构造智能指针。
3.常规的指针:
优点:复杂而且高效
缺点:需要程序员手动管理他们行为,具有指针的所有缺陷,从而造成编程困难。
因为,不仅要检查对象的delete,而且要检查成员指针的delete是否该执行。
这三种方案如果都被用在项目上,那么,我们该如何做。
1.如果是值类型,就不用去管理。
2.如果是智能指针类型,也不用去管理。
3.如果是常规类型,那么就需要去查看它的成员指针,看它的成员指针是什么类型。然后递归地查找。转3.
第三种方案万万用不得。。。。。。。。。。。。。
最好的是第二种:
方法是保留一个对象中指针的使用计数。算法:
1.if(赋值操作)
『
if(自己的指针需要delete)
那么delete掉;
复制各个成员过来。
指针成员的使用计数+1;
』
if(复制构造)
『
计数++;
』
2.else if(析构)
『
计数-1;
if(计数为0)delete;
』
3.if(其他构造)
『
构造智能指针对象,并且计数为1;
如果不构造指针对象,那么计数为0;
』
这样,每次在析构的时候,都在询问:
我这个指针成员的副本有几个?
用指针NULL表示有0个副本,为1表示1个副本。。。。总结为一句话:
思想:在delete某个对象的时候,进行询问:
是否这个对象的指针成员需要delete?