析构函数私有化

本文探讨了在C++中将析构函数私有化的应用场景,即确保对象仅能通过new在堆上创建,并通过成员函数控制其销毁过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前两天去面试 碰到一个 题目 构造函数私有化了。。问有什么问题。。我居然没发现!疯了

今天在公司突然想起 析构函数 在什么情况下私有化的问题 (虽然以前知道 但总也记不住 )一位筒子的回复 挺好的 转到这里:

只能用new生成的对象    
  用new生成的对象,在面向对象中是很有用的.它保存在堆上,可以自由控制生命周期。  
   
  但如何保证一个对象只能在堆上生成呢?  
   
  答案其实也很简单,只需把析构函数定义为私有成员。例如OnlyCanBeNew类定义。  
   
        1|           class   OnlyCanBeNew  
   
        2|           {  
   
        3|                   ~OnlyCanBeNew(){}  
   
        4|           public:  
   
        5|                   OnlyCanBeNew(){}  
   
        6|           };  
   
  原因呢,C++是一个静态绑定的语言。在编译过程中,所有的非虚函数调用都必须分析完成。即使是虚函数,也需检查可访问性。因些,当在栈上生成对象时,对象会自动析构,也就说析构函数必须可以访问。而堆上生成对象,由于析构时机由程序员控制,所以不一定需要析构函数。  
   
  保证了不能在栈上生成对象后,需要证明能在堆上生成它。这里OnlyCanNew与一般对象唯一的区别在于它的析构函数为私有。delete操作会调用析构函数。所以不能编译。那么如何释放它呢?  
   
  答案也很简单,提供一个成员函数,完成delete操作。在成员函数中,析构函数是可以访问的。当然detele操作也是可以编译通过。  
   
    7|                   void   OnlyCanBeNew::Destroy()  
   
    8|                   {        
   
    9|                           delete   this;  
   
  10|                   }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值