posted by REDFORCE 2017. 3. 22. 23:09

목차


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에 대해서 뵙도록 하겠습니다~