NitroShare::FileServer
私は2つのコンストラクターを持つという名前のクラスを持っています:
FileServer(QObject * parent = NULL);
FileServer(const Certificate & certificate, QObject * parent = NULL);
最初のコンストラクターの実装は次のとおりです(29 行目)。
FileServer::FileServer(QObject * parent)
: QObject(parent), d(new FileServerPrivate(this))
{
qDebug("Constructor invoked!");
}
このクラスは、次の名前の別のクラスのメンバーですNitroShareClient
:
NitroShare::FileServer server;
したがって、NitroShareClient
クラスのインスタンスが作成されるときに、上記の最初のコンストラクターが呼び出されると想定されます。しかし、そうではありません。その結果、プログラムがクラッシュします。
ここで、物事が苛立たしいものから本当に奇妙なものに変わります: 上記の最初の行のコンストラクター宣言を次のように置き換えると:
FileServer(QObject * parent = NULL) : d(NULL) { qDebug("Constructor invoked!"); }
...コンストラクタが実際に呼び出されます! 同じサイン。同じパラメータ。同じ体。唯一の違いは、関数定義の場所です。
ここで何が起こっているのか誰か説明できますか? それが役立つ場合、私は Linux で GCC 4.7 を使用しています。