关于c++类中的指针成员问题

来源:互联网 发布:智多星造价软件多少钱 编辑:程序博客网 时间:2024/06/07 23:18

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?

 

     

 

 

 

 

 

       

                  

        

 

原创粉丝点击