从工厂销毁创建的对象(悬空指针问题)

时间:2018-06-18 17:44:06

标签: oop design-patterns factory

假设我有一个工厂类,其创建方法可以创建对象,并且还有一个关闭选项,使所有创建的对象无效(因此不能再使用它们)。

类似的东西(C#):

public class MyFactory {
    public MyObject CreateObject() { ... }
    public void DestroyAllObjects() { ... }
}

此代码的客户端创建对象,缓存引用并使用它。对象可以手动销毁,也可以通过调用DestroyAllObjects'来销毁。在工厂上课。

这里的问题是一个悬垂的指针'问题。如何通知客户端代码缓存的对象已失效且不应再使用?我想要使​​用回调(con:使客户端代码复杂化)或检查每个调用该对象仍然有效(con:使MyObject代码+代码复制复杂化)。

据我所知,在理想的世界中,对象会自行破坏,但系统需要集中关闭方法。

如果有人在过去遇到过类似的问题,我很乐意听到您的想法。

1 个答案:

答案 0 :(得分:0)

如果您的工厂可以销毁对象,我们可以说它是默认所有者。那么为什么不把更多的功能集中在工厂或工厂附近呢?即关于对象的生动性,在权威的注册表中打开工厂。

一种可能性:在MyObject周围创建一个包装器,在每个操作之前使用注册表检查底层MyObject是否已被销毁?如果它已被销毁,它将是No-Op或抛出异常或任何你喜欢的。