[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를 추가할 수 있습니다. 계속해서 궁금한 점이나 추가 정보가 있으면 언제든지 물어보세요!