dobject_zh
2022-04-18 16:18:14

Class::DObject

暂无该属性


Detailed Description

~chinese ~chinese

deepin-tool-kit 中所有公开类的祖先类。 ~chinese 通过和 UnknownCommand D_DECLARE_PRIVATE 、UnknownCommand D_DECLARE_PUBLIC ~chinese 等宏的配合方便派生类中实现 D-Point 结构。虽然 QObject 中已经有了这样的实现结构,但是没有 ~chinese 办法在不使用 Qt 私有模块的情况下,在 DTK 库中达到同样的目的。D-Point 结构由“公共接口类” ~chinese 和“私有数据类”两部分组成,在 DTK 中,DObjectPrivate 是所有数据类的祖先类。在这种结构下, ~chinese 只有 DObject 这个基类中定了一个指向于私有数据类的对象指针,派生类中不会也不应该再定义任何 ~chinese 成员变量,派生类中需要添加数据成员时,可以继承 DObjectPrivate,将新的成员变量放到私有类中

~chinese 例子:

~chinese a.h

class APrivate;
class A : public DObject
{
    D_DECLARE_PRIVATE(A)
public:
    A();
    int test() const;

protected:
    A(APrivate &dd, DObject *parent = nullptr);
};

~chinese a.cpp

class APrivate : public DObjectPrivate
{
public:
    APrivate(A *qq)
        : DObjectPrivate(qq)
    {

    }

    D_DECLARE_PUBLIC(A)
    // 此处添加数据成员
    int data;
};

A::A()
    : DObject(*new APrivate(this))
{

}

int test() const
{
    D_D(A);

    return d->data;
}

A::A(APrivate &dd, DObject *parent)
    : DObject(dd, parent)
{

}

一般来讲, DObject 只会用在 DTK 库中定义的类,对于使用 DTK 库的应用程序来说不用关心它的存在 ~chinese

See also href{https://wiki.qt.io/D-Pointer/zh,类的 D-Point 结构}

DObject::DObject

[protected constructor  ]

DObject(DObject *parent) ~chinese

只有在不需要数据成员的派生类中才会使用

DObject::DObject

[protected constructor  ]

DObject(DObjectPrivate &dd, DObject *parent) ~chinese

在派生类中比较常用的构造函数 ~chinese dd 私有类对象

DObject::~DObject

[protected destructor  virtual]

~DObject()

DObject::DObject

[protected constructor  ]

DObject(const DObject &)

DObject::operator=

[protected copy-assign  ]

DObject & operator=(const DObject &)

DObject::d_func

[protected plain  ]

DObjectPrivate * d_func()

DObject::d_func

[protected plain  ]

const DObjectPrivate * d_func() const