誰かがこのマクロを私に説明できるかどうか疑問に思っていました。C++マクロによるNULLポインタの発生
#define Q_DECLARE_PRIVATE(Class) \
inline Class##Private* d_func() { return reinterpret_cast<Class##Private
*>(d_ptr); } \
inline const Class##Private* d_func() const { return reinterpret_cast<const
Class##Private *>(d_ptr); } \
friend class Class##Private;
QTを使用するアプリケーションがあり、次のスニペットの最後の行でアクセス違反例外が発生してクラッシュします。
class Q_GUI_EXPORT QWidget : public QObject, public QPaintDevice
{
Q_OBJECT
Q_DECLARE_PRIVATE(QWidget)
と何が最後の行の中にNULLポインタの動作を引き起こすことができますか?
この行は、QListViewから継承するクラスをインスタンス化するときにヒットします。このクラスは、チェーンの途中で質問に表示される 'QWidget'を間接的に継承します。 –
例外が発生したときに 'this'ポインタがNULLかどうかを確認できますか? –