【发布时间】:2010-02-02 06:47:10
【问题描述】:
pimpl 惯用语中使用的实现类是否有任何理由拥有任何私有成员?我真正能想到的唯一原因是保护自己免受自己的伤害——即私有成员用于执行类和用户之间的某种契约,在这种情况下,类和用户是密切相关的,所以它似乎没有必要。
【问题讨论】:
-
假设一个只读字符串的池化实现,实现类可以很好地进行引用计数,以便在需要时知道何时释放内存。
-
dirkgently:我想,为了对字符串的所有引用进行单一计数,该计数必须集中存储在字符串中,而不是包装器中。我在这里错过了什么?
-
@Steven Sudit:因为它会违反设计——严格来说,引用计数不是表示字符串所需的数据结构的一部分。
-
@Dirk:Plauger 的 STL 中的引用计数字符串违反了设计,因为计数与字符一起存储。虽然可以添加另一层,但这是否意味着计数字符串指向一个共享计数器结构,该结构本身指向一个原始字符串?只要计数器结构从不与其他结构实例共享字符串,这才是安全的。
-
@Steven Sudit:另一层?不明白你的意思。无论如何,我还没有看到该代码,我想一定有充分的理由以这种方式实现它——所以任何评论都是无关紧要的。无论如何,标准库确实有时会使用一些技巧来提高效率。
标签: c++ pimpl-idiom