d指针中的“d”代表啥?

Posted

技术标签:

【中文标题】d指针中的“d”代表啥?【英文标题】:What does "d" stand for in d-pointer?d指针中的“d”代表什么? 【发布时间】:2019-10-23 10:02:22 【问题描述】:

Qt 在其开发过程中大量使用 PIMPL 成语:https://wiki.qt.io/D-Pointer

正如我所读到的here:““d-pointer”这个名字源于奇趣科技的 Arnt Gulbrandsen,他首先将该技术引入 Qt,使其成为第一批保持二进制兼容性的 C++ GUI 库之一甚至在更大的版本之间。”。但是没有人说“D”代表什么。

那么 D-Pointer 中的“D”代表什么?

【问题讨论】:

我相信“d”代表“数据”,因为 d 指针指向一个存储所有类数据的结构。换句话说,它是一个“数据指针”。 我从未在 Qt 的文档中看到过任何声明,但我一直以 d = data.更一般地说,d 指针是 Qt 对 pimpl 设计模式的使用,即它是一个不透明的指针。您总是可以将其视为颠倒的 p(其中 p 代表 pimpl)。 【参考方案1】:

从这个页面Data Sharing with Class(来自 QT 的旧文档),它说:

在我们可以共享一个对象的私有数据之前,我们必须使用称为“d-pointer”(数据指针)的习语将其接口与私有数据分开

所以,d-pointer 表示数据指针

【讨论】:

【参考方案2】:

我会添加我自己的答案,因为我记得它发生的那一天。

我试图在保持二进制兼容性的同时扩展某些东西,并注意到有一个名为“数据”的指针,我可以将其重用于不同的目的。所以我为实现相关的数据创建了一个私有类(一个 pimpl),把旧数据和我的新数据都放在那里,因为现有的名称似乎很合适,所以我保留了这个名称。

在同一天晚些时候的一次简短会议后,我将它从 data 缩写为 d,我们一致认为我 发明 偶然发现的模式很好,我们应该广泛使用它,并且d-> 足够短且独特,可以在任何地方用作特定于实现的字段的标记。

在同一次会议上,我们决定从那时起将特定于实现的数据放在 d-> 中作为一项政策,主要是为了减少包含的数量,同时也是为了保持声明的 API 总体上干净.类声明中更少的私有变量意味着更少的出错机会、更少的诱惑、更少的与子类命名冲突的事情等等。更卫生。

【讨论】:

您是在谈论 Qt API 还是您正在从事的其他项目? :) 当然是关于 Qt 的。这就是术语“d 指针”的来源。其他人做了类似的事情,但使用了其他名称,主要是“pimpl”。 大概谁是这种东西的发明者的答案应该是最重要的!无知会读第一个答案,不看谁在回答问题。感谢 Arnt d_ptr :) @arnt

以上是关于d指针中的“d”代表啥?的主要内容,如果未能解决你的问题,请参考以下文章

printf中的%c,%d,%u........都分别代表输出的是啥类型的?

rabin karp算法中的“h”代表啥?

printf中的%*d是啥意思?

安全评价方法中的L、S、R、D是啥意思

参考文献中M,D,J分别代表啥

SQL查询结果中的NULL代表啥意思