d 指针在 Qt 中大量使用,它们是 pimpl idiom 的一种实现。我知道 pimpl 习语的优点和缺点。但是我错过了 d-pointers 实现的优势。 Here和 here是 d 指针的样本。 只用这个不是更简单吗?
class MyClassPrivate;
class MyClass {
// interface methods
private:
MyClassPrivate *pimpl_;
};
最佳答案
d 指针是 pimpl 模式的众多实现之一。它也是早期的实现之一:“‘d-pointer’这个名字源于 Trolltech 的 Arnt Gulbrandsen,他首先将这项技术引入 Qt,使其成为第一批保持二进制兼容性的 C++ GUI 库之一,即使在更大的释放。” Source
使用宏的一个优点是可以选择在编译时集中更改模式实现的一些实现细节。例如,您可以设计您的宏,让您可以选择切换到 fast pimpl implementation。稍后无需更改大量代码(如果您使用的是 pimpl,希望您不需要它:-))。前提是您在宏设计/实现中没有出错...
但是,我个人建议避免在您的 pimpl 实现中使用宏,因为它们对于您的源代码树的任何新手来说都是神秘的。宏创建神奇的方言,这些方言往往容易出错,而且不如原始源代码有意义。它们还伴随着与 C 预处理器相关的所有问题;它不知道底层语言。
我个人喜欢使用我称之为 d-reference 的东西。您可以使用引用而不是指针,而不必 d-reference。 8-) 它看起来像这样:
// MyClass.h
class MyClass
{
public:
MyClass();
~MyClass();
// implementation methods
private:
class MyClassPrivate& d;
};
// MyClass.cpp
struct MyClassPrivate
{
int x;
};
MyClass::MyClass()
: d(*new MyClassPrivate)
{
}
MyClass::~MyClass()
{
delete &d;
}
// In methods use d.x
关于c++ - 使用 d 指针的优点和缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4983972/