C++ (18) 썸네일형 리스트형 C++ 면접 질문) "어떤 때 reference 쓰고 어떤 때 value를 써야 할까요?" 매개변수로 어떤 때 reference를 쓰고 어떤 때 value를 쓰는지 먼저 말씀드릴께요.reference를 쓰는 기준:복사 비용이 클 때void sub_process(const std::string& text) { // read text without copying}원본 수정이 필요 할 때void modify_value(int& value) { value += 1; // access value by reference}value를 쓰는 기준:const reference 안쓰고 간결하게 사용 (복사 비용이 거의 없으므로)int use_without_using_const(int value) { return value + 1;}int use_using_const_safely(const int& valu.. C++ 면접 질문) "언제 Reference를 쓰고 언제 Pointer를 써야 할까요?" Reference와 Pointer의 차이점은 다음 글에서 알아보았습니다.C++ 면접 질문) "C++에서 Reference 와 Pointer의 차이점은?"언제 Reference를 쓰고 언제 Pointer를 써야 할 지 기준은 다음과 같습니다. 기준 1. Pointer가 굳이 필요없는 곳은 다 Reference 쓴다. Reference가 쓰이는 곳:함수 매개변수함수 반환값임시 객체아래 예시에서 임시 객체는 리터럴이 std::string 으로 객체 변환 되면서 생성됨임시 객체 (std::string) 는 stack에 저장됨임시 객체는 reference가 const 참조로 바인딩 한다면, reference가 사용되는한 임시 객체는 살려둠 (C++ 임시 객체 수면 연장 규칙)const std::string& ge.. C++ 면접 질문) "C++에서 Reference 와 Pointer의 차이점은?" 다음 예시 에서 30으로 변경된 값은?int a = 10;int& ref = a;ref = 30; ref 일까? 아니다. 답은 a 이다. 여기서 차이점 1. reference는 초기화 후 가리키는 대상을 변경 할 수 없다 위는 포인터라면 변경 가능하다int b = 10;int* b_ptr = &b;*b_ptr = 30;Reference는 초기화 후 대상을 변경 할 수 없다.여기서 차이점 2. 초기화 시 무조건 가리키는 대상이 정해져야 한다 가 발생한다.또한, NULL 값을 넣어 초기화 하는 것도 불가능하다. 그대신 Referece는 안전성을 갖게 된다. Nullpointer exception 이라던지, delete의 강제성이 없다.단, 가리키던 객체가 사라지면, reference는 엄한 곳을 가리키게 .. C++ 면접 질문) delete[] 를 통해 얼마나 해제 할지 알 수 있는 이유는? metadata 개념이 있다.metadata에는 array에 몇 개의 element가 존재하는지 기록되어있다.즉, stack에 있는 메모리 포인터가 얼마나 heap에 메모리를 할당하였는지 기록하고 있다고 볼 수도 있다. 그럼 metadata는 어디에 저장될까? 예시)int* arr = new int[10]; 라고 할 때, 10 개 정수를 저장 할 공간 외 metadata를 위한 추가 공간을 할당 한다. meatadata는 new[]에 의해 반환 되는 memory address (heap) 의 앞부분에 위치하고 있다. 만약 delete[]에 의해 별도 정의한 class의 destructor가 불리는 상황이라면? metadata에 적힌 element 수만큼 destructor가 불린다. C++) 함수를 static으로 선언 declare 한다는 것 멤버 함수를 static으로 호출 한다는 것 class instance를 만들지 않고 함수를 호출하겠다는 것 class의 static 멤버 변수만 가지고 놀려는 것 그 반면 일반 함수를 static으로 호출 한다는 것 static int getInt(int i) // 이 둘의 차이는 int getInt(int i) global 함수와는 다르게 static local 함수가 됨 이 말이란 같은 파일 내의 함수들 내에서만 static 함수를 호출 할 수 있음 C++) check whether file exists 파일 존재 여부 확인 [access(2)] 파일 존재 여부 확인 시 자주 사용하는 함수는 access 라는 함수 입니다. 함수의 정의 int access(const char* pathname, int mode) mode에는 파일의 어떤 부분을 확인 할지 전달 F_OK (파일 존재 여부) R_OK (파일 읽기 권한 여부) W_OK (파일 쓰기 권한 여부) X_OK (파일 실행 권한 여부) 함수의 반환 값 성공 시 zero 반환 실패 시 -1 반환 (errno is set) set 되는 errno 리스트 EACCES (권한 부족) ELOOP 등 사용 예제 확인 할 파일 경로 (const char *) : "/tmp/file" 확인 할 파일 부분 (int) : F_OK #include const char* file_path = "/tmp/file"; .. C++) static 멤버 변수 life cycle class encapsulation과 관계가 있다 static 멤버 변수는 외부에서 global하게 initialize 되어야 한다. static 멤버 변수는 class 내부에서 private 하게 선언되어 있어야 효과가 있다 외부 사람들은 쓰려면 클래스에서 정의된 getter 함수를 사용하여야 한다. C++) [스마트 포인터] weak_pointer, unique_pointer, shared_pointer unique_ponter는 이름이 말하듯이 unique 하게 한 곳에서만 해당 객체를 사용할 때 다른 곳에서는 쉽게 사용하지 못하도록 막는 smart pointer 이다. shared_pointer는 약점이 있다. A -> B를 참조하고 B -> A를 참조 할 때 메모리를 해제 할 수 없다. Scope에서 벗어나 A를 해제 하였을 때 B -> A를 참조해서 삭제 안됨. Scope에서 벗어나 B를 해제 하였을 때 A -> B를 참조해서 삭제 안됨. weak_pointer를 사용해서 위 문제를 해결 할 수 있다. B -> A shared_pointer를 이용하는 weak_pointer로 만들면 참조는 가능하지만 ref count를 증가시키지 않는다 weak_pointer는 ref count를 증가시키지 않는.. 이전 1 2 3 다음