一般我们的析构函数都是定为public
私有化虚构函数
我们有这样一种应用场景,我们需要实例化一个类,但是我们却不想维护它的生命周期,所以希望它功能实现完毕就自动销毁。
举个栗子:
我们有一个线程需要处理IO或者其他耗时的工作,主体函数实例化该类,一般使用下面两种方法
- 使用局部变量实例化,显然主体函数过完,对象就销毁,而对象并不是阻塞式的,它依然需要对象内资源,这将造成无法预知的后果。
- 使用new在堆上申请,生命周期可靠了,但是需要维护一个堆上的指针,而不知道该对象何时处理结束。如果实例化对象一多就很难受了。
所以,我们可以采用delete this的办法,在该类的最后处理完毕的函数调用delete this销毁自身。
这种方法是可行,但存在一个问题,域外不能New完自己delete ,否则可能出现两次delete的情况。
然后,可以采用将析构函数私有化,对象只能被New而不能被delete。强行delete编译器会报不可访问的错误。自然编译通不过,所以保证了该种方法的安全。
网友评论