使用 d 指针有哪些优点和缺点?

2023-11-21

d 指针在 Qt 中大量使用,它们是 pimpl 惯用法的实现。我知道 pimpl 习语的优点和缺点。但我错过了 d 指针实现的优点。Here and here是 d 指针的样本。 直接用这个不是更方便吗?

class MyClassPrivate;
class MyClass {
  // interface methods
private:
  MyClassPrivate *pimpl_;
};

d 指针是 pimpl 模式的众多实现之一。这也是早期的实现之一:““d-pointer”这个名字源于 Trolltech 的 Arnt Gulbrandsen,他首先将该技术引入 Qt,使其成为第一个即使在较大版本之间也能保持二进制兼容性的 C++ GUI 库之一。" Source

使用宏的优点之一是可以选择在编译时在中央位置更改模式实现的一些实现细节。例如,您可以设计宏,让您可以选择切换到快速的 pimpl 实现稍后无需更改大量代码(希望如果您使用 pimpl :-),您将不需要它)。前提是你的宏观设计/实现没有犯错误......

然而,我个人建议避免在 pimpl 实现中使用宏,因为它们对于源代码树的任何新手来说都是神秘的。宏创建的神奇方言通常容易出错,而且不如原始源代码有意义。它们还存在与 C 预处理器相关的所有问题;它不知道底层语言。

我个人喜欢使用所谓的 d 参考。您可以使用引用而不是指针,并且不必进行 D 引用。 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 d 指针有哪些优点和缺点? 的相关文章

随机推荐