我有一个名为的类NitroShare::FileServer
,它有两个构造函数:
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。