2014-01-16 3 views

답변

1

전체 없음이되지 않습니다 :

는 차이가 사이입니다. ;)

전체적으로 똑같지 만 정확하지는 않습니다 (sftrabbit, Nawaz 및 0x499602D2와 같은 방식으로 제안합니다).

당신은 당신의 질문 here에 대한 답변을 찾을 것이다)

+9

동일한 작업을 수행하지만 클래스의 특정 속성을 변경합니다 (사소한 것인지 여부와 같음). –

+2

정확히 동일하지 않습니다. 둘 다 [std :: is_trivial :: value'] (http://en.cppreference.com/w/cpp/types/is_trivial)에 대해 다른 값을 반환합니다. – Nawaz

+1

* 차이점이 있습니다. '= default'를 가진 생성자는'constexpr'이고'noexcept'를 지정합니다. 다른 의견이 말하는 것과 함께. – 0x499602D2

0

그래서,이 생성자하지만 소멸자를 사용하지 않습니다. 그러나 그것은 하나의 요점을 보여줍니다. 다음 코드는 컴파일되고 정적 어설 션은 실행되지 않습니다.

즉, 한 예에서는 사용자 정의 소멸자가 있고 다른 예에서는 __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, ""); 
+0

소멸자 ... – Nawaz

+0

@Nawaz : 네, 소멸자. 저는'std :: is_trivial'을 알지 못했지만 테스트가 있다고 생각했습니다. 'Y'에서 일어날 수있는 간단한 이동 생성자에 대한 것입니다. 일반적인 경우'= default'는'{}'을 의미하지 않는다는 의미 론적 의미를 증명합니다 –

+0

답변의 굵은 부분을 의미하지 않는 한, 여기서 나는 생성자 대신에 소멸자를 써야했다. –

관련 문제