[c++] 운영자 지정 생성자에 대한 명시적인 guard
명시적인 guard를 사용한 지정 생성자
명시적인 guard란 함수 오버로딩 및 기타 구문을 사용하여 특정 조건을 충족할 때만 함수가 호출되도록 하는 것을 말합니다. 지정 생성자에 대한 명시적인 guard를 정의하여 특정 조건이 충족되지 않을 때 컴파일 오류를 방지할 수 있습니다.
#include <iostream>
class MyClass {
public:
explicit MyClass(int value) : m_value(value) {
if (value <= 0) {
throw std::invalid_argument("Value must be positive");
}
}
void printValue() {
std::cout << "Value: " << m_value << std::endl;
}
private:
int m_value;
};
int main() {
try {
// 명시적인 guard가 적용된 지정 생성자 호출
MyClass obj1(5);
obj1.printValue();
// 잘못된 값으로 객체를 생성하려고 할 때 컴파일 오류 발생
// MyClass obj2(-3);
} catch (const std::invalid_argument& e) {
std::cout << "Error: " << e.what() << std::endl;
}
return 0;
}
위 예제에서, MyClass
의 생성자는 explicit
키워드를 사용하여 명시적인 guard를 설정했습니다. 또한, 생성자 내에서 value
가 0보다 작거나 같을 때 예외를 발생시키도록 guard를 추가했습니다.
이제, main
함수에서 MyClass
의 명시적인 guard가 있는 지정 생성자를 사용하는 예제와, guard에 걸리는 또 다른 예제를 보여주는 예제를 통해 guard의 역할을 확인할 수 있습니다.
이렇게 하면 적절한 조건이 충족되지 않을 때 컴파일 오류가 발생하여 런타임 오류를 방지할 수 있습니다.
참고 자료:
이렇게 guard를 사용하여 지정 생성자에 명시적인 guard를 추가할 수 있습니다. 계속해서 궁금한 점이나 추가 정보가 있으면 언제든지 물어보세요!