상세 컨텐츠

본문 제목

[C++11] Delegating Constructors

C++/Modern C++(11, 14, 17, 20)

by deulee 2023. 8. 25. 15:53

본문

"Delegating Constructors"는 C++11부터 지원되는 기능으로, 한 클래스의 생성자가 같은 클래스의 다른 생성자를 호출하여 초기화하는 기능을 가리킨다.

 

#include <iostream>

class MyClass {
private:
	int num;
public:
	MyClass(int n) : num(n) {
		// 다른 초기화 작업 수행
		std::cout << "called by default constructor" << std::endl;
	}
	MyClass() : MyClass(42) {
		// 기본 초기화 작업 수행
		std::cout << "default constructor" << std::endl;
	}
	int getNum() const {
		return num;
	}
};

int main(void)
{
	MyClass N;
	std::cout << N.getNum() << std::endl; // 42
	return 0;
}

위의 코드에서 `MyClass`의 첫 번째 생성자는 정수 값을 받아들여멤버 변수 `num`을 초기화한다. 두 번째 생성자는 아무 인자도 받지 않으며, 이 생성자는 `MyClass(int value)` 생성자를 호출하여 `num` 멤버 변수를 `42`로 초기화한다. 이렇게 함으로써, 두 번째 생성자에서는 첫 번째 생성자의 중복 초기화 코드를 재사용하게 한다.

 

이때 주의해야 할 점은, "delegating constructor""초기화 리스트"에서만 다른 생성자를 호출할 수 있다는 것이다.

 

※ 생성자의 본문에서 다른 생성자를 호출하는 것은 임시 객체를 만드는 것 뿐 본인에게는 아무런 영향을 주지 않는다.

 

이는 복잡한 클래스와 계층 구조에서도 delegating constructor를 활용하여 중복 코드를 줄일 수 있다.

 

 

'C++ > Modern C++(11, 14, 17, 20)' 카테고리의 다른 글

[C++11] Attributes  (0) 2023.08.25
[C++11] constexpr  (0) 2023.08.25
[C++11] User-defined literals  (0) 2023.08.25
[C++11] Explicit virtual overrides  (0) 2023.08.25
[C++11] Final specifier  (0) 2023.08.24

관련글 더보기