0

我的任务是移植一些遗留代码,在此过程中我想尽可能地遵循最佳实践,因为我的前任很遗憾没有这样做。以下是我遇到的问题的基本框架:

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是在构造函数中使用时为类编写一个复制构造函数,这就是我想要做的。我想要做的是CPropertyPageFoo复制构造函数初始化列表中包含复制构造函数,但这是不允许的,因为CPropertyPage它是 MFC 类的子类CObject,其复制构造函数是私有的。如果我尝试在Foo的构造函数初始化列表中使用的构造函数,它会编译,但我不确定这是否达到与CPropertyPage复制构造函数相同的目的(免责声明:我对复制构造函数和初始化列表很陌生)。

那么,我该如何正确编写Foo的复制构造函数呢?我的方法在某些方面存在根本缺陷吗?

编辑:尝试语法修复,标识CObject为 MFC 类

4

1 回答 1

1

以下是与此问题有关的 MSDN 链接:

http://msdn.microsoft.com/en-us/library/ccb3dh5c.aspx

原来我的静态分析工具在检查初始化列表中的基类时有点过分热心。

于 2013-03-28T15:17:47.803 回答