加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何以可维护的方式为整个类层次结构保护析构函数?

发布时间:2020-12-16 05:03:36 所属栏目:百科 来源:网络整理
导读:我想确保没有人能够从我的类层次结构中删除任何对象,然后使用提供的Destroy方法. 基本原理是来自此层次结构的任何对象在开始销毁自身之前需要使用特殊的写入互斥锁,以确保在另一个线程使用它们时不会删除对象. 我知道我可以通过引用计数来防止这个问题,但对
我想确保没有人能够从我的类层次结构中删除任何对象,然后使用提供的Destroy方法.

基本原理是来自此层次结构的任何对象在开始销毁自身之前需要使用特殊的写入互斥锁,以确保在另一个线程使用它们时不会删除对象.

我知道我可以通过引用计数来防止这个问题,但对于潜在的性能影响和内存分配而言,这对系统来说将是一个更大的变化.

有没有办法以某种方式有效/巧妙地使所有的析构函数受到保护,以便子类可以调用他们的父母析构函数,而外人必须使用Destroy?

我提出的一个安全(即它不会腐烂)的解决方案是将所有析构函数设为私有并将每个派生类声明为基类的朋友,但我更喜欢更优雅,更少手动和更容易的东西维护(不需要修改基类以便从中派生).

有这样的东西吗?也许一些聪明的伎俩会让事情像我一样“有效”?

PS.我现在选择的解决方案是不阻止任何人在所有情况下调用delete(只是在基类中保护它)但检测到这种情况并在基类析构函数中调用abort.

解决方法

不要试图重新发明语言提供的生命周期机制.

要使您的类的对象正确初始化,它还需要能够自我清理.

在它的构造函数中传递互斥体或获取互斥体的方法,它可以在它的析构函数中使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读