在阅读pImpl习语的一些内容时,我发现了类似的内容:
MyClass::MyClass() : pimpl_( new MyClassImp() )
第一:这是什么意思?
第二:语法是什么?
很抱歉这样的菜鸟。
答案 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通常通过指向库创建和销毁的不透明对象来处理此问题。