在我们公司,其中一个核心C ++类(数据库连接指针)被实现为引用计数指针。要清楚,对象本身不是数据库连接,而是指向数据库连接对象的指针。
图书馆已经很老了,设计的人已经不在了。
到目前为止,我还没有找到公司中的任何C ++专家,而是选择了为什么这个特定的设计。有什么想法吗?
它引入了一些问题(部分是由于使用了糟糕的引用指针实现),我试图了解这个设计是否实际上有一些深层次的原因?
这些天的使用模式似乎是DB连接管理器类返回DB连接指针对象,并且有点不清楚DB连接指针是否被设计为能够独立于DB连接管理器使用。
答案 0 :(得分:2)
可能这是一个错误。不看代码就不可能确定,但引用计数指针实现的质量是有启发性的。设计不佳,特别是资源管理方面的设计,在C ++社区</bitter sarcasm>
中并非闻所未闻。
如上所述,当您拥有不确定生命周期的对象时,引用计数指针非常有用,这些对象的创建成本非常高,或者其状态需要在多个用户之间共享。根据底层架构,数据库连接可以适合这个定义:例如,如果每个数据库连接都需要通过全局互联网进行身份验证,那么保存单个连接并重复使用它可能很容易让您感到麻烦,而不是建立新的连接和处理当你走的时候。
但是如果我理解正确的话,你就没有一个数据库连接对象,其中有一组指向它的refcounted指针。相反,你有一个数据库连接对象,一个普通指针的集合,以及这些指针的refcounted指针的集合。这是精神错乱,几乎可以肯定是原始开发人员思维混乱的结果。另一种选择是它是蓄意邪恶的行为,例如:确保工作安全。如果是这样,他们肯定会失败,因为没有一个肇事者仍然为你的公司工作。