我有一个名为NitroShare::FileServer
的类,它有两个构造函数:
FileServer(QObject * parent = NULL);
FileServer(const Certificate & certificate, QObject * parent = NULL);
第一个构造函数的实现是here(第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。