목차
1. Auto
2. range based for
3. enum class
4. non-static data member initializers
5. initializer lists
6. default / delete definition
7. override / final
8. emplacement
9. constexpr
10. lambda
11. random
12. thread
이번 글에서는 [6편] dafault / delete definition 에 대해서 살펴보도록 하겠습니다.
6. default / delete
default : 컴파일러가 함수를 자동으로 생성하도록 명시적으로 지정
delete : 컴파일러가 함수를 자동으로 생성하지 않도록 명시적으로 지정
위의 코드를 살펴보면 class TEST의 생성자와 소멸자는 default로 명시를 하는 것을 볼 수 있습니다.
default로 명시가 되었기 때문에 class TEST의 내용은 컴파일러가 함수를 자동으로 생성하게 됩니다.
반대로 class TEST2는 delete로 함수들이 명시적으로 지정되어 있습니다.
그리고 생성자와 void* operator new(size_t) = delete; 가 정의되어 있는 관계로
new 연산자를 이용한 할당이 블로킹 되어 있습니다.
두 번째 예로 다음 코드를 보도록 하겠습니다.
간단히 struct 안에 func(double d) 함수 선언하고 delete로 지정을 하였습니다.
그리고 main에서 func( double d ) 함수를 사용하려고 했지만!
Error가 빰빠카밤~ 하고 나오는걸 볼 수 있으실 겁니다.
아그럼 default는 자동으로 생성하는데 뭘해준다는거야?
라고 궁금해 하실까봐.
(사실 아 그냥 대충써... 하고 귀차니즘 발동하려다가 더 보충해봅니다..)
이번엔 default에 대한 예를 적어 보겠습니다.
위 코드를 보면 MyTest 클래스에서 기본적인 MyTest() 생성자가 기본으로 있습니다.
보통 기본 생성자는 우리가 따로 선언/정의를 해주지 않아도 컴파일러가 몰래 쓰담쓰담 만드는 게 상식입니다.
그렇다면 아래와 같이 코드를 바꾸면 어떻게 될까요?
당연히 기본 생성자를 직접 선언도 안했을 뿐더러 다른 생성자를 만들었기 때문에
기본 생성자가 만들어지지 않습니다.
따라서 당연히 컴파일 에러가 빠밤~ 하고 나오게 되조.
이때 편하게 쓰는게 바로 default 입니다.
default로 기본 생성자를 명시해줬기 때문에 딱히 정의를 안하더라도 컴파일러가 자동으로 생성해주게 됩니다.
이런식으로 활용하는 것이 default 입니다~
딱히 default 자체는 많이 쓸일이 없을 것 같습니다만.
delete는 유용하게 활용이 가능하겠더군요.
그럼 다음 7편에 override와 final에 대해서 뵙도록 하겠습니다~
'Programming > C++' 카테고리의 다른 글
[8편] Modern C++정리: emplacement (0) | 2017.03.23 |
---|---|
[7편] Modern C++정리: override / final (0) | 2017.03.23 |
[4-5편] Modern C++정리: non-static data member initializers (0) | 2017.03.22 |
[3편] Modern C++정리: enum class (0) | 2017.03.22 |
[2편] Modern C++정리: range based for (0) | 2017.03.22 |