delete 함수

보물창고·2022년 8월 10일
0

c++ basic 코드누리

목록 보기
13/50

개념

: 함수를 삭제함.

delete를 이용해서 함수를 삭제하는 이유

  1. 암시적 형변환에 의해 "의도하지 않은 함수가 호출되는 것을 차단하자."
  2. 템플릿이 "특정 타입의 함수를 생성하지 못하게 함."
  3. 컴파일러가 자동으로 생성하는 멤버 함수를 사용하지 못하게 하기 위함.
    -> 복사 생성자 및 이동생성자 등등
    : 가장 널리 사용함.

왜 이런것을 만들었을까?

1) 함수의 인자와는 다른 타입을 보낼 경우, 데이터 손실이 발생함.

2) 함수를 선언부를 delete 함으로서 컴파일 에러로 발생시킬 수 있음.

  • 선언부만 제공하면 -> 링크에러 발생함.

차라리 delete를 함으로써 빌드시에 컴파일 에러를 통해 처리하도록 하자는 의미임.

내가 모르는 내용.
선언된 함수를 찾는 것은 컴파일러가 아닌, 링커가 하는 역할임.
obj, 라이브러리 배포시 링커가 아닌, 컴파일만 하게됨.

problem

가) 암시적 형변환 못하게 막자.
int , int 함수를 만들고, 인자로 int, int를 전달하자.
인자로 double, double 을 3.3, 2.7 을 전달하자.
-> 그리고 인자를 바로 출력하라.

  • double, double 함수 오버로딩으로 선언 후에, delete 하라.

  • 예제를 통해 알 수 있는 점.
    : 데이터 손실이 발생함. 이 아니라 아예 호출자체를 금지함.

나) double double 인자로 되어 있는 함수를 선언만 하고,
call 해보자. vs delete 하고 call 해보자 : 차이점을 확인하라.


-> 링크에러 발생함. : 함수 구현부가 없기 때문.


-> 컴파일 에러 발생함. : 명시적으로 delete 시킴.

다) template으로 add함수를 만들고, double 타입 호출되는 것을 delete해보아라.

결론

: 삭제하는 이유에 알맞게 사용하자.

profile
🔥🔥🔥

0개의 댓글