我唯一看到的问题是QTimeZone支持是有条件的,因此如果需要在Qt版本中编译的应用程序与提供它的库版本之间保持ABI兼容性,则对于QDateTime的PIMPL(可能包括QTimeZone,也可能不包括)可能会很有用。但是,反过来,添加一个虚拟的“QTimezone”版本将是微不足道的。 - Matteo Italia
@MatteoItalia 这是真的,但也有状态标志和夏令时信息,我想开发人员认为这足够复杂,需要使用 PIMPL。 - Joseph Ireland
看起来并没有帮助,阅读源代码后发现他们将很多实现锁定在序列化代码中,因此在这里使用PIMPL可能是一个错误。虽然很难抱怨,因为Qt在二进制兼容性方面非常出色,他们更关心的是这个而不是小的性能提升。 - Joseph Ireland
QDate
和QTime
,它们是“常规”的类,其数据直接位于它们的private:
部分中。那么QDateTime
有何不同呢? - Matteo ItaliaQDateTime
包含一个QTimeZone
,但它本身是一个基于QSharedDataPointer
的类,通常为空(因此没有需要分配的内存),或者是从其他地方共享的副本(并且是不可变的,所以你无法以任何方式分离它)。如果QDateTime
不是 dptr-based 的话,就根本不会有任何堆分配。 - Matteo ItaliaQTimeZone
支持是有条件的,因此如果需要在Qt版本中编译的应用程序与提供它的库版本之间保持ABI兼容性,则对于QDateTime
的PIMPL(可能包括QTimeZone
,也可能不包括)可能会很有用。但是,反过来,添加一个虚拟的“QTimezone”版本将是微不足道的。 - Matteo Italia