gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:21 24 4
gpt4 key购买 nike

我想确保没有人能够从我的类层次结构中删除任何对象,除非使用提供的 Destroy 方法。

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

我知道我可以通过引用计数来避免这个问题,但就潜在的性能影响和内存分配而言,这对系统来说也是一个更大的改变。

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

我想出的一个安全(即它不会腐烂)的解决方案是将所有析构函数设为私有(private)并将每个派生类声明为基类的友元,但我更喜欢更优雅、更少手动且更易于维护(例如不需要修改基类即可从中派生)。

有这样的东西吗?也许是一些聪明的技巧让事情按照我的意愿“工作”?

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

最佳答案

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

为了正确初始化您的类的对象,它还需要能够 self 清理。

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

关于c++ - 如何以可维护的方式为整个类层次结构保护析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15245219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com