전 레거시 코드를 이식하는 작업을 맡았습니다. 이전에 유감스럽게도 모범 사례를 가능한 한 많이 따르고 싶습니다. 아래는 문제의 기본 프레임 워크는 내가으로 실행했습니다있다 : 나는 new
생성자에 사용되는 클래스의 복사 생성자를 작성하는 가장 좋은 방법이 있다고 읽은 이후CObject의 자식 복사 생성자 이니셜 라이저 목록
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
}
}
, 그게 무슨이다 나는하려고 애쓴다. 내가하고 싶은 일은 Foo
의 복사 생성자 이니셜 라이저 목록에 CPropertyPage
의 복사본 생성자가 포함되어 있지만 CPropertyPage
은 복사 생성자가 private 인 MFC 클래스 CObject
의 자식이므로 허용되지 않습니다. Foo
의 생성자 initializer 목록에 사용 된 생성자를 시도하면 컴파일되지만, CPropertyPage
의 복사 생성자와 동일한 끝을 얻었는지 확실하지 않습니다. (면책 조항 : 생성자 및 초기화 목록을 복사하는 것이 매우 쉽습니다) .
따라서 Foo
의 복사본 생성자를 어떻게 적절하게 쓸 수 있습니까? 내 접근 방식은 근본적으로 어떤면에서 결함이 있습니까?
편집 :
http://msdn.microsoft.com/en-us/library/ccb3dh5c.aspx
내 정적 분석 도구는 조금 지나치게 당하고 밝혀 : 구문 수정의 시도는, 아래
'public class Foo'? 그것은 C++가 아닙니다. 그리고 C++과 비슷한 언어가 클래스 정의 내에서 범위 지정 연산자 ('Foo :: Foo')를 필요로하는지 의심 스럽습니다. –
@ JoachimPileborg 나는 그가 CPP 파일에서 복사/붙여 넣기 한 것 같은 추측을하고, 우리 눈에 좋게하기 위해 인라인으로 만들었다. 두 경우 모두 그가 원하는 것을 쉽게 이해할 수 있습니다. –
@ ThePhD 기본적으로 그렇습니다. 구문이 완벽하지는 않지만, 내가 묻는 바를 얻지 못한다고 생각합니다. –