나는 원래 이것을 소멸자에 대한 질문으로 만 게시했지만 이제 기본 생성자를 고려하고 있습니다. 원래 질문은 다음과 같습니다.
클래스에 가상의 소멸자를 제공하고 싶지만 컴파일러가 생성하는 것과 동일한 소멸자를 제공하려면
=default
다음을 사용할 수 있습니다 .class Widget { public: virtual ~Widget() = default; };
그러나 빈 정의를 사용하여 타이핑을 줄이면 동일한 효과를 얻을 수있는 것 같습니다.
class Widget { public: virtual ~Widget() {} };
이 두 정의가 다르게 행동하는 방법이 있습니까?
이 질문에 대한 답변을 기반으로 기본 생성자의 상황이 비슷해 보입니다. 소멸자에 대해 " =default
"와 " {}
"의 의미에 거의 차이가 없다는 것을 감안할 때 기본 생성자에 대한 이러한 옵션 사이에 의미에 거의 차이가 없습니까? 즉, 해당 유형의 객체가 생성되고 파괴되는 유형을 생성한다고 가정하면 왜 말하고 싶습니까?
Widget() = default;
대신에
Widget() {}
?
원래 게시물이 일부 SO 규칙을 위반 한 후이 질문을 확장하면 죄송합니다. 기본 생성자에 대해 거의 동일한 질문을 게시하면 바람직하지 않은 옵션으로 생각났습니다.
std::has_trivial_destructor<Widget>::value
입니다 . 그 의미가 무엇인지 모르겠습니다. :)true
false
= default
더 명백한 imo이며 생성자를 통한 지원과 일치합니다.