C++ “奇怪”;类型class::method():stuff;语法C++;

C++ “奇怪”;类型class::method():stuff;语法C++;,c++,syntax,constructor,pimpl-idiom,C++,Syntax,Constructor,Pimpl Idiom,在阅读一些关于pImpl习语的资料时,我发现如下内容: MyClass::MyClass():pimpl_U4;(新的MyClassMP()) 第一:这是什么意思? 第二:语法是什么? 很抱歉成为这样一个noob。这定义了MyClass的构造函数 语法是构造函数定义的语法(我假设后面有一组大括号来定义构造函数的主体) MyClass的成员pimpl\uu正在初始化为指向类型为MyClassImp的新对象的指针。这几乎与以下内容相同: MyClass::MyClass() { pimpl_

在阅读一些关于pImpl习语的资料时,我发现如下内容:

MyClass::MyClass():pimpl_U4;(新的MyClassMP())

第一:这是什么意思?
第二:语法是什么?

很抱歉成为这样一个noob。

这定义了
MyClass
的构造函数

语法是构造函数定义的语法(我假设后面有一组大括号来定义构造函数的主体)

MyClass
的成员
pimpl\uu
正在初始化为指向类型为
MyClassImp
的新对象的指针。这几乎与以下内容相同:

MyClass::MyClass()
{
    pimpl_ = new MyClassImp();
}

然而,最好尽可能使用初始化列表来初始化类成员;参见上面链接的C++ FAQ Lite条目。

< P>这是一个初始化列表。 它允许您在调用构造函数代码之前设置成员和基类构造函数的值


您应该使用它来初始化类实例的值。

除了像其他人已经解释过的那样,它是一个具有初始化器列表的构造函数之外,它还使用私有实现模式

C++要求类声明包含类的所有公共和私有成员。这可能导致您不得不公开您不想公开的实现细节,并使您的实现成为API/ABI的一部分。由于在公共头中增加了#include以支持私有成员变量,它还可以显著增加编译时间

使用实际实现生成第二个类,并仅公开函数API,这会使它更干净,但代价是额外的间接层


C++通常通过指向一个指向库创建和销毁的不透明对象的指针来处理这个问题。这是你在你的C++基础上读到的,而不是问SO.sorry的问题,我是C++的新手,我来自C世界。我熟悉OOP和Obj-C和Delphi,但这是C++特有的。然后请自己做一个帮助,阅读C++的基本介绍。正如安德烈所说,这是非常基本的知识。如果没有基本的介绍,你无法有效地学习这门语言。谢谢你的快速回答!这就把事情弄清楚了!我在FAQ Lite上搜索了这个。。。