私はいくつかのレガシーコードを移植する任務を負っています。前任者が残念ながらそうしなかったので、そうすることで、可能な限りベストプラクティスに従いたいと思います。以下は、私が遭遇した問題の基本的なフレームワークです。
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
ません。のコンストラクタ初期化子リストで使用されているコンストラクタを試してみると、コンパイルされますが、これがのコピーコンストラクタと同じ目的を達成するかどうかはわかりません(免責事項:コンストラクタと初期化リストをコピーするのはまったく新しいです)。Foo
CPropertyPage
CObject
Foo
CPropertyPage
Foo
では、どうすればのコピーコンストラクターを適切に作成できますか?私のアプローチは根本的に何らかの形で欠陥がありますか?
CObject
編集: MFCクラスとして識別される構文修正の試み