首先是Q_D指针:先贴上我们的测试用例.
class TEST;
class TESTPrivate
{
public:
TESTPrivate(TEST *parent):q_ptr(parent),a(666)
{cout << "TESTPrivate" << endl;}
~TESTPrivate()
{cout << "~TESTPrivate" << endl;}
private:
Q_DECLARE_PUBLIC(TEST)
private:
TEST *q_ptr;
int a;
};
class TEST
{
public:
TEST():d_ptr(new TESTPrivate(this)),b(2){}
~TEST(){delete d_ptr;}
int getValue()
{
Q_D(TEST);
return d->a;
}
private:
int b;
TESTPrivate *d_ptr;
Q_DECLARE_PRIVATE(TEST)
};
int main(int /*argc*/, char */*argv*/[])
{
TEST t;
cout << t.getValue() << endl;
}
查看这里面定义的宏:
#define Q_DECLARE_PRIVATE(Class) \
inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(qGetPtrHelper(d_ptr)); } \
inline const Class##Private