我的任务是移植一些遗留代码,并且这样做我希望尽可能地遵循最佳实践,因为我的前任遗憾地没有。以下是我遇到的问题的基本框架:
class Foo : public CPropertyPage
{
// Constructor
Foo() : CPropertyPage(Foo::ID)
{
pBar = new Bar();
// init other things
}
// Copy Constructor
Foo(const Foo& other) : CPropertPage(other) // C2248 compiler error
{
pBar = new Bar(*other.pBar);
// copy other things
}
}
因为我已经读过在构造函数中使用new
时为类编写复制构造函数的最佳实践,这就是我正在尝试做的事情。我想要做的是在CPropertyPage
的复制构造函数初始化列表中包含Foo
的复制构造函数,但这是不允许的,因为CPropertyPage
是MFC类的子代{ {1}},其拷贝构造函数是私有的。如果我尝试在CObject
的构造函数初始化列表中使用的构造函数,它会编译,但我不确定它是否与Foo
的复制构造函数达到同样的结果(免责声明:我很new来复制构造函数和初始化列表)。
那么,我怎样才能正确编写CPropertyPage
的复制构造函数?我的方法在某种程度上是否存在根本缺陷?
编辑:尝试修复语法,将Foo
标识为MFC类
答案 0 :(得分:1)
以下是与此问题相关的MSDN链接:
http://msdn.microsoft.com/en-us/library/ccb3dh5c.aspx
事实证明我的静态分析工具在检查初始化列表中的基类时有点过于热心。