[c++] noexcept 가상 함수
#include <iostream>
class Base {
public:
virtual void foo() noexcept {
std::cout << "Base::foo" << std::endl;
}
};
class Derived : public Base {
public:
void foo() noexcept override {
std::cout << "Derived::foo" << std::endl;
}
};
int main() {
Base* ptr = new Derived();
ptr->foo();
delete ptr;
return 0;
}
이 예제에서 Base
클래스는 foo
함수를 noexcept
지정자와 함께 가상으로 선언합니다. 이후 Derived
클래스에서 이 함수를 다시 재정의하고 noexcept
지정자로 지정합니다.
noexcept
지정자는 함수가 예외를 발생시키지 않음을 나타냅니다. 이는 컴파일러가 최적화 및 예외 처리 코드를 생성하지 않아도 되기 때문에 성능상의 이점을 가져올 수 있습니다.
가상 함수에서 noexcept
지정자를 사용하는 것은 해당 함수가 예외를 발생시키지 않는다는 것을 명시적으로 나타내기 위함입니다. 이는 파생 클래스에서 이 함수를 오버라이드할 때 예외가 발생하지 않는다는 것을 보장합니다.
이러한 방식으로 noexcept
지정자는 가상 함수에서도 유용하게 활용될 수 있습니다.
참고: https://en.cppreference.com/w/cpp/language/noexcept_spec