1> C++에서의 구조체, 클래스 차이
=> 기본 접근 명시자가 구조체는 public 클래스는 private.
2> C#에서의 구조체, 클래스 차이
=> 구조체는 스택영역에서, 클래스는 힙 영역에서 생성됨.
구조체는 값 타입, 클래스는 참조 타입
3> 가상 함수 테이블 , 포인터의 동작 방식 설명
=> 가상 함수 테이블 포인터는 클래스형 객체가 정의된 메모리 공간의 맨 위쪽에 명시됨.
이 가상 함수 테이블 포인터를 시작 포인터로 하는 가상 함수 테이블 디스크립터에는
본인 클래스 내에 "가상으로" 명시된 함수들의 시작 포인터들이 기록되어 있다.
부모 클래스에 정의되어있는 함수가 오버라이딩 되었을 경우 오버라이딩 된 함수의 시작 포인터가
가상 함수 테이블에 저장이 되고, 오버라이딩이 되어있지 않은 부모 클래스의 가상 함수는 원본 함수의 시작 주소가
가상 함수 테이블에 명시된다.
가상함수 테이블을 사용하지 않는다면, 다양성을 보장 받지 못하고,
자식 클래스에서는 부모 클래스에서 오버라이딩한 함수 외 부모클래스에서 오버라이딩 당한 함수의 오버로드 함수들은
자식 클래스에서 접근하지 못한다.
(오버로딩 오버라이딩 꼬리질문 또 들어올 수 있음)
4> RTTI란?
=> Real Time Type Information으로 프로그램 실행 중 변수의 타입 정보를 얻을 수 있는 기술.
typeid()를 통해 변수의 타입을 얻을 수 있음.
dynamic_cast 와 연동하여 다운 캐스팅 가능.
5> RAII란?
=> Resource Acquisition is Initialization으로 자동으로 할당을 해제해주는 C++ 기술.
unique_ptr, share_ptr, weak_ptr, lock_guard 등등이 RAII 기술을 사용.
(꼬리 질문) unique_ptr, share_ptr, weak_ptr 차이점?
unique_ptr은 이중 포인팅 불가, 즉 레퍼런스를 이용하여 복제 불가, RAII로 자동 할당 해제
share_ptr은 레퍼런스를 이용하여 복제가능, 만일 A가 B를 참조하고 B가 A를 참조할 때, A share_ptr이 소멸 되었다면,
B는 A가 제거되었는지 영문을 모르므로 A를 참조, 또는 B 본인을 제거하려다가 예외가 발생이 됨.
weak_ptr은 위 share_ptr문제를 해결하기 위해 share_ptr을 래핑하여 A share_ptr이 소멸 되었을 시, weak_ptr이 A가
NULL이며 이전에 제거가 되었음을 알려줌. 이를 통해 B가 제거 될 시 예외를 회피할 수 있게 됨.
이 외에 C++ 관련 CS 면접 예상 문제 추천 좀
참고로 본인 게임 개발 쪽 종사자임.
야추야추
본인 클래스 내에 가상으로 -> 본인 및 부모 클래스에서 가상으로 선언된 원본 함수들의 시작 주소 -> 함수의 주소 자식 클래스에서는 부모 클래스에서 오버라이딩한 함수~~~ -> 명시적으로 호출하면 가능 스마트 포인터는 그냥 다시 배워 동적 바인딩에 대한 대비 추가 오버로딩은 어떻게 구현되는 가 대비 추가
피드백 ㄳㄳㄳ
게임 개발에서 C++을 얼마나 깊이 있게 다루는진 모르겠는데, 캐스팅 연산자 4종류나 virtual 상속같은건 물어볼 만 하지 않을까?
const A *과 A * const의 차이static이 어떻게 쓰이는 지그리고 c++에서 제공하는 멀티스레딩 등정도?이후론힙스택 등 공통적인 이론네트워크 OS 기초그래픽스 파이프라인이나물리엔진, 충돌판정그리고 그 회사에서 쓰이는 상용엔진 지식이 중요할 듯 - dc App
5 > 유저의 실수로 인한 메모리 누수를 막기 위한 디자인 패턴의 방식임.
raii 틀렷다 임마 - dc App
언어 기능은 그렇게 자세히 안 파고들고 보통 그 분야 관련 이론을 많이 묻지. 니가 가려는 분야의 이론을 파셈 이런 건 시간 낭비임
ㅋㅋㅋ
저것도 모르면 언어를 안다곤 할 수 있나
2번 하나때문에 개고생했었는데 왜 이 간단한걸 왜 몰랐었는지 이해가 안됨 ㅋㅋ 여기서 다시보니까 웃기네
raii는 객체의 생명주기와 그 객체가 필요로하고 따라서 확보한 자원의 생명주기와 연동되어 있다는 말임. 객체가 살아 있으면 자원도 살아 있고, 객체가 죽으면 자원도 죽어 있음. 이걸 깔쌈하게 말하면 객체의 자원 확보 여부는 class invariant 이다라고 함.