总结网上看到的文章,使用D指针的好处如下:
1.保证代码的二进制兼容性;
2.隐藏实现细节;
3.提高编译速度;
Qt关于D指针和Q指针的定义:
d_ptr指针指向私有实现类,使用如下宏定义辅助函数和声明友元类
#define Q_DECLARE_PRIVATE(Class) /
inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(qGetPtrHelper(d_ptr)); } /
inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(qGetPtrHelper(d_ptr)); } /
friend class Class##Private;
q_ptr指针指向父类,使用如下宏定义辅助函数和声明友元类
#define Q_DECLARE_PUBLIC(Class) /
inline Class* q_func() { return static_cast<Class *>(q_ptr); } /
inline const Class* q_func() const { return static_cast<const Class *>(q_ptr); } /
friend class Class;
使用D指针和Q指针的宏定义
#define Q_D(Class) Class##Private * const d &