由于性能问题,我试图重构一些C ++代码,并且我想知道解决此问题的最佳方法。我有一个说DataGatherer的类,它是大型系统的核心组件。此类已序列化并通过数据流发送,被复制并存储到表中,为了并发而被复制(签出副本而不是有权访问原始DataGatherer对象)。我列出了一些示例,只是为了让您知道它同时使用了复制和赋值运算符。

问题在于,DataGatherer对象可能变得非常大,因为它们本质上包含大量收集的数据以及有关该数据的统计信息和元数据。在许多情况下,仅需要统计信息和元数据,而不是后端数据收集。

有没有在这里有用的设计模式?也许更笼统的问题是,在大多数情况下,您只需要对象的一部分,而对象内部却紧密地结合在一起,几乎无法拆分时该怎么办?

我有想法


将类拆分为一个DataGatherer类和一个指向DataGathererBackend对象的指针。在大多数情况下,请返回浅表副本,以避免在不使用DataGathererBackend时复制所有开销。我讨厌这样做,因为在您需要浅拷贝时与在需要深拷贝时都遇到了麻烦,并且一般的混乱形式不得不诉诸于DataGatherer对象,因为该对象没有后端对象的NULL指针,因为它不是在这些情况下需要。
将类拆分为DataStatistics和Data,并创建一个包装并包含两者的第3类。
还有其他想法吗?

最佳答案

如果只需要统计信息,那么可以通过值或const引用返回统计信息结构,并将检索结果从复制运算符更改为调用统计信息getter函数。

08-16 09:32