初始化C+的最佳实践+;订单关键时的组件? 我用C++来模拟游戏引擎。一个常见的任务是按照一定的顺序创建一系列对象,比如对象B必须遵循对象a。必须强制执行该顺序不一定是因为类是相互依赖的,而是因为它们与硬件相关,所以必须遵循先给a通电,然后给B通电的安全过程

初始化C+的最佳实践+;订单关键时的组件? 我用C++来模拟游戏引擎。一个常见的任务是按照一定的顺序创建一系列对象,比如对象B必须遵循对象a。必须强制执行该顺序不一定是因为类是相互依赖的,而是因为它们与硬件相关,所以必须遵循先给a通电,然后给B通电的安全过程,c++,dependency-management,C++,Dependency Management,风格上的问题是我如何确保这样的秩序。在面向对象设计方面没有依赖性,因为类B不需要任何关于类A的知识,反之亦然。因此,国际奥委会在确保这样的秩序要求方面并不过分 什么是确保这种顺序依赖的C++最佳实践? 更新:初始化中的A->B自然需要销毁中的B->A。A和B也应该是单例的,因为它们通常与硬件相关。有许多合理的方法来完成这项任务。不过,还有一些尚未解决的问题。首先,如果A必须在B之前建造,那么B必须在A之后被摧毁吗?第二,你能得到这个物体的倍数吗?如果是这样,是否有一些参数必须匹配或类似的东西?例

风格上的问题是我如何确保这样的秩序。在面向对象设计方面没有依赖性,因为类B不需要任何关于类A的知识,反之亦然。因此,国际奥委会在确保这样的秩序要求方面并不过分

<>什么是确保这种顺序依赖的C++最佳实践?
更新:初始化中的A->B自然需要销毁中的B->A。A和B也应该是单例的,因为它们通常与硬件相关。

有许多合理的方法来完成这项任务。不过,还有一些尚未解决的问题。首先,如果A必须在B之前建造,那么B必须在A之后被摧毁吗?第二,你能得到这个物体的倍数吗?如果是这样,是否有一些参数必须匹配或类似的东西?例如,假设A和B的构造函数都取int,那么在构造B(1)之前必须先构造A(1)

我认为绝对安全的方法是将A和B嵌入到另一个类中,称为C。这是最安全的,因为标准保证:1)它们将按照类中声明的顺序构造,2)它们将按照与声明相反的顺序被破坏。请注意,这也是自动异常安全的,与许多使用工厂的潜在实现不同

根据A和B的构造函数的细节,让C直接保存A和B对象可能更有意义,或者让作用域指针更有意义。我会确保A和B具有私有或受保护的析构函数(取决于您是否计划允许继承),并将C声明为A和B的朋友。然后,您可以使A和B成为C的公共成员,以方便访问其接口,或在不同程度上限制内容


编辑:A和B应该有私有析构函数,以防止用户意外删除。例如,如果您决定将C实现为具有指向A和B的作用域指针,那么您可以从作用域指针获取原始指针并对其调用delete。最好在编译时失败。此外,如果您希望A和B成为单例,那么我建议的模式非常有用。因为A和B都有私有构造函数,所以您可以将C作为一个单例实现,这将满足这一要求。

答案只能与您的问题一样具体。您在另一个对象的依赖项需求中有一个对象。确保前者在后者之前建造。这种情况是如何发生的完全取决于使用的上下文和其中的生命周期(您知道的信息;我们不知道)。也许问题比您所描述的更复杂,但是什么阻止了您初始化一件事和另一件事呢?我修改了我的问题。问题更多的是初始化顺序,而不是依赖关系。如果顺序很关键,请创建一个工厂,按照所需的顺序构建所有对象。将工厂公开为公共,并增加中每个顺序对象的构造函数的可访问性限制,以便没有人可以随机初始化任何给定的objectinded,B(1)需要在A(1)之前进行销毁。将~A()和~B()隐藏为隐私有什么好处?