>백엔드 개발 >C++ >C의 기본 생성자와 소멸자의 '=default'와 '{}'의 차이점은 무엇입니까?

C의 기본 생성자와 소멸자의 '=default'와 '{}'의 차이점은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-07 04:47:10481검색

What's the Difference Between

기본 생성자와 소멸자에 대한 "=default"와 "{}"의 차이점 이해

"=default"와 "{ }"는 기본 생성자와 소멸자에 대해 서로 바꿔서 사용할 수 있는 것처럼 보일 수 있지만 가상이 아닌 소멸자와 소멸자를 고려할 때 중요한 차이점이 있습니다.

가상이 아닌 소멸자

가상이 아닌 소멸자를 처리할 때 "=default" 구문이 중요한 역할을 합니다. 이는 사소한 클래스의 경우와 마찬가지로 자동으로 소멸자를 생성하도록 컴파일러에 지시하여 유형을 사소한 것으로 간주하게 합니다. 반면, "{}"는 사용자 제공 소멸자를 생성하여 클래스의 사소성 상태를 변경합니다.

비가상 생성자

마찬가지로, -가상 생성자, "=default"를 사용하면 컴파일러가 단순성을 유지하면서 기본 생성자를 생성할 수 있습니다. 그러나 "{}"는 사용자가 제공한 생성자를 지정하여 클래스의 단순성에 잠재적으로 영향을 미칠 수 있습니다.

Trivial Classes

C 11에서 trivial 클래스는 다음과 같은 클래스를 의미합니다. 사용자가 제공한 특수 멤버 함수(기본 생성자, 복사/이동 생성자/할당, 소멸자)가 없습니다. 이러한 함수는 자동으로 생성되므로 memcpy와 같은 최적화를 적용할 수 있습니다.

다음 코드를 고려하세요.

struct Trivial
{
  int foo;
};

struct NotTrivial
{
  int foo;

  NotTrivial() {}
};

struct Trivial2
{
  int foo;

  Trivial2() = default;
};
  • Trivial은 사용자가 제공한 특수 멤버가 없기 때문에 trivial입니다. 함수.
  • NotTrivial은 사용자가 제공한 기본 생성자가 있으므로 간단하지 않습니다.
  • Trivial2는 "=default"로 표시된 생성자가 있더라도 여전히 컴파일러의 기본 생성자

결론

"=default"와 "{}"는 비슷해 보이지만 사용될 경우 클래스의 사소함에 상당한 영향을 미칠 수 있습니다. 가상이 아닌 소멸자 또는 생성자를 사용합니다. "=default"는 컴파일러의 기본 동작을 유지하고 단순성을 유지하는 반면, "{}"는 사용자 제공 함수를 생성하고 잠재적으로 클래스의 단순성 상태를 변경합니다.

위 내용은 C의 기본 생성자와 소멸자의 '=default'와 '{}'의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.