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を実行しようとしています。私がやりたいのは、コピーコンストラクター初期化子リストにコピーコンストラクターを含めることですが、コピーコンストラクターがプライベートであるMFCクラスの子であるため、これは許可されていCPropertyPageません。のコンストラクタ初期化子リストで使用されているコンストラクタを試してみると、コンパイルされますが、これがのコピーコンストラクタと同じ目的を達成するかどうかはわかりません(免責事項:コンストラクタと初期化リストをコピーするのはまったく新しいです)。FooCPropertyPageCObjectFooCPropertyPage

Fooでは、どうすればのコピーコンストラクターを適切に作成できますか?私のアプローチは根本的に何らかの形で欠陥がありますか?

CObject編集: MFCクラスとして識別される構文修正の試み

4

1 に答える 1

1

以下は、この問題に関連するMSDNリンクです。

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

私の静的分析ツールは、初期化子リストの基本クラスをチェックするのに少し熱心でした。

于 2013-03-28T15:17:47.803 に答える