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

时间:2009-11-22 20:06:41

标签: c++ syntax constructor pimpl-idiom

在阅读pImpl习语的一些内容时,我发现了类似的内容:

MyClass::MyClass() : pimpl_( new MyClassImp() )

第一:这是什么意思?
第二:语法是什么?
很抱歉这样的菜鸟。

3 个答案:

答案 0 :(得分:8)

这定义了MyClass的构造函数。

语法是带有an initialization list的构造函数定义的语法(我假设在此之后有一组括号来定义构造函数的主体)。

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

除了作为其他人已经解释过的具有初始化列表的构造函数之外,它还使用私有实现模式。

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

使用实际实现创建第二个类并公开功能API使得它更加清晰,但是以额外的间接层为代价。

C通常通过指向库创建和销毁的不透明对象来处理此问题。