본문 바로가기

C11

[ C++ ] 가상 소멸자( Virtual Destructor ) 말 그대로 virtual로 선언된 소멸자를 가상 소멸자( Virtual Destructor )라고 한다. 근데 왜 소멸자에 virtual 선언이 필요할까? 먼저 예제를 보자. ( * 혹시 VS에서 위 코드를 작성하다가 다음과 같은 에러가 발생한 경우, "const char * 형식의 인수가 char * 형식의 매개 변수와 호환되지 않습니다" 프로젝트( 오른쪽 클릭 ) > 속성 > C/C++ > 언어 > 준수 모드 > 아니오로 바꿔주면 해결된다. VS 2015에는 가능한데 VS 2017부터 준수 모드가 생겨서 생긴 문제이다. ) 결과에서 보이듯이 객체의 소멸을 A형 포인터로 명령하니, A 클래스의 소멸자만 호출되었다. 따라서 strB가 남아있어, 메모리 누수가 발생하게 된다. 즉, 객체의 소멸과정에서는 포.. 2019. 10. 10.
[ C++ ] 가상 함수( virtual Function ) , 순수 가상함수( Pure Virtual Function ), 추상 클래스( Abstract Class ) ( * 개발환경을 Dev-C++-> Visual Studio로 변경함. 헤더 파일과 클래스를 관리하기 편하고 그 외 코딩하기에도 편함. ) 가상 함수에 들어가기 전에, 다음의 예제를 살펴보고 사용하는 이유를 알아보자. 클래스 A A를 상속하는 클래스 B, B를 상속하는 클래스 C가 있다. 그리고 Show 함수는 오버라이딩으로 구현되어있다. 메인 함수를 살펴보면 34행) C형 포인터 변수 c는 C 객체를 가리키고 있고, 35행) B형 포인터 변수 b는 C객체를 가리키고 있고, ( 결론적으론 .. c가 객체 C를 가리키니까. ) 36행) A형 포인터 변수 a는 C 객체를 가리키고 있다. ( 결론적으론.. b가 객체 C를 가리키니까. ) 이 말 즉은, "자료형이 기초 클래스인 포인터 변수는 유도 클래스의 객체.. 2019. 10. 10.
[ C++ ] C언어의 표준함수 호출 이전 포스트에 잠깐 언급했는데, C++에서 C언어의 헤더 파일을 추가하는 것도 가능하다. 즉, C언어의 라이브러리는 C++의 표준 라이브러리에도 포함되어 있어서 헤더 파일의 확장자인 .h를 생략하고 앞에 소문자 c를 붙이면 C++의 헤더 파일 이름이 된다. 예를 들자면 다음과 같은 C언어의 헤더파일을 보면 #include #include #include #include 뒤에 확장자가 있다. 그럼 확장자를 생략하고 소문자 c를 붙이면 #include #include #include #include C++의 헤더파일 이름이 된 것을 확인할 수 있다. 하지만 가급적으로 C++ 헤더를 기반으로 사용하는 것이 좋다. 왜냐하면 C++ 표준 라이브러리가 제공하는 함수와 C 표준 라이브러리가 제공하는 함수들이 완전히 .. 2019. 9. 6.
[ C++ ] new 와 delete를 이용한 메모리 동적할당, 메모리 누수(Memory Leak)에 대하여.. 우선 동적 할당이란 " 프로그램 실행 중에 동적으로 메모리를 할당하는 것을 말합니다." 즉, 런타임 중에 메모리를 할당한다는 것이고, 동적으로 할당된 메모리는 Heap영역에 할당이 됩니다. 프로그램을 개발하다 보면 상황에 따라 메모리 공간을 실시간으로 확보해야 하는데 그때 사용하는 게 메모리 동적 할당입니다. C에서는 malloc로 힙 영역에 할당해주고, free로 힙에 할당된 메모리 공간을 소멸합니다. C++에서는 new로 힙 영역에 할당해주고, delete로 힙에 할당된 메모리 공간을 소멸합니다. 하지만 C++에서는 C언어의 헤더 파일을 추가하는 것도 가능하기 때문에 malloc와 free도 사용이 가능합니다. 그러면 먼저 malloc와 free를 이용한 메모리 동적 할당 예제를 보겠습니다. char.. 2019. 9. 6.