Nat*_*man 1 c++ qt constructor declaration
我有一个名为NitroShare::FileServer有两个构造函数的类:
FileServer(QObject * parent = NULL);
FileServer(const Certificate & certificate, QObject * parent = NULL);
Run Code Online (Sandbox Code Playgroud)
第一个构造函数的实现在这里(第29行):
FileServer::FileServer(QObject * parent)
: QObject(parent), d(new FileServerPrivate(this))
{
qDebug("Constructor invoked!");
}
Run Code Online (Sandbox Code Playgroud)
此类是另一个名为的类的成员NitroShareClient:
NitroShare::FileServer server;
Run Code Online (Sandbox Code Playgroud)
因此,可以假设在NitroShareClient创建类的实例时将调用上面的第一个构造函数.但事实并非如此.因此,程序崩溃了.
这里是从令人沮丧到真正奇怪的事情:如果我在上面第一行中替换构造函数声明:
FileServer(QObject * parent = NULL) : d(NULL) { qDebug("Constructor invoked!"); }
Run Code Online (Sandbox Code Playgroud)
...... 实际上是调用了构造函数!相同的签名.相同的参数.同样的身体.唯一的区别是函数定义的位置.
谁能解释一下这里发生了什么?如果它有帮助,我在Linux上使用GCC 4.7.