프로그래밍 일반 2014. 4. 10. 11:52

C++ 11 생성자 위임 Delegating constructors

웹 컴파일러 링크 : http://melpon.org/wandbox/


만일 여러 생성자가 같은 일을 하기 원한다면 초기화 함수를 만들어 생성자에서 호출하도록 할 것이다.


class CTest

{

public :

CTest()

{

Init(0);

}

CTest(int iValue)

{

Init(iValue);

}

CTest(std::string szString)

{

int iCastValue = boost::lexical_cast<int>(szString);


Init(iCastValue);

}


void Init(int iValue) {


if ( 0 < iValue && iValue < MAX ) {

m_iMember = iValue;

}

else throw error_value(iValue);

// ....

}


private :

int m_iMember;

};


하지만 위의 코드는 유지 보수가 불편하고 오류가 발생할 확률도 높을 뿐더러 작성해야하는 코드도 길다.

이런 불편을 해결하기 위해서 C++ 11 에서는 한 개의 생성자를 정의하여 다른 생성자에서 사용할 수 있게 하였다.



class CTest

{

public:

CTest(int iValue)

{

if ( 0 < iValue && iValue < MAX ) {

m_iMember = iValue;

}

else throw error_value(iValue);

// ....

}


CTest() : CTest{0} {}

CTest(std::string szString) : CTest{ boost::lexical_cast<int>(szString) } {}


private:

int m_iMember;

};


참고 :