인수가없는 기본 생성자와 빈 생성자 사이의 차이점은 무엇입니까?인수가없는 기본 생성자와 빈 생성자 사이의 차이점은 무엇입니까?
이MyClass() {}
MyClass() = default;
인수가없는 기본 생성자와 빈 생성자 사이의 차이점은 무엇입니까?인수가없는 기본 생성자와 빈 생성자 사이의 차이점은 무엇입니까?
이MyClass() {}
MyClass() = default;
전체 없음이되지 않습니다 :
는 차이가 사이입니다. ;)전체적으로 똑같지 만 정확하지는 않습니다 (sftrabbit, Nawaz 및 0x499602D2와 같은 방식으로 제안합니다).
당신은 당신의 질문 here에 대한 답변을 찾을 것이다)
동일한 작업을 수행하지만 클래스의 특정 속성을 변경합니다 (사소한 것인지 여부와 같음). –
정확히 동일하지 않습니다. 둘 다 [std :: is_trivial
* 차이점이 있습니다. '= default'를 가진 생성자는'constexpr'이고'noexcept'를 지정합니다. 다른 의견이 말하는 것과 함께. – 0x499602D2
그래서,이 생성자하지만 소멸자를 사용하지 않습니다. 그러나 그것은 하나의 요점을 보여줍니다. 다음 코드는 컴파일되고 정적 어설 션은 실행되지 않습니다.
즉, 한 예에서는 사용자 정의 소멸자가 있고 다른 예에서는 __default destructor가입니다.
#include <type_traits>
class X {
public:
~X() {}
};
class Y {
public:
~Y() = default;
};
static_assert(std::is_trivially_move_constructible<X>::value == false, "");
static_assert(std::is_trivially_move_constructible<Y>::value == true, "");
소멸자 ... – Nawaz
@Nawaz : 네, 소멸자. 저는'std :: is_trivial'을 알지 못했지만 테스트가 있다고 생각했습니다. 'Y'에서 일어날 수있는 간단한 이동 생성자에 대한 것입니다. 일반적인 경우'= default'는'{}'을 의미하지 않는다는 의미 론적 의미를 증명합니다 –
답변의 굵은 부분을 의미하지 않는 한, 여기서 나는 생성자 대신에 소멸자를 써야했다. –
첫 번째 생성자는 간단하지 않지만 두 번째 생성자는 사소한 것 같습니다. – Simple