본문 바로가기
반응형

SWE/C++ OOP43

[C++] 언제 복사생성자와 복사대입연산자를 오버로딩해야할까? | 얕은복사와 깊은복사 컴파일러는 디폴트로 복사 생성자와 복사대입연산자를 만들어준다. 그러나 개발자가 직접 재정의하는 경우가 있는데, 언제 그래야하는건지 왜 그래야하는건지 궁금했다. 복사 함수들(복사 생성자와 복사 대입 연산자)을 언제 따로 정의해야 하는가? 결론부터 말하자면 클래스에 멤버변수로 포인터를 가지고 있을 때, 복사함수들을 재정의해야 한다. 클래스가 포인터를 포함하고 있지 않으면, 복사함수들을 재정의할 필요가 없다. 컴파일러가 모든 클래스에 대한 기본 복사함수들을 만들어주기 때문이다. 그러나 우리가 런타임 자원할당(파일 핸들러, 네트워크 연결)이나 포인터를 사용한다면, 컴파일러가 생성해주는 디폴트 복사 함수들이 충분하지 않을 수 있다. - 예시 #include using namespace std; // 복사 함수들을.. 2023. 2. 24.
실행 에러 AddressSanitizer odr violation 해결 방법 문제 발생 상황은 프로그램을 실행하였더니 라이브러리 로딩하는 중에 아래 로그를 남기고 종료되었다. 에러 로그 29-Jan-2021 11:25:04.597 loading DynDB instance 'sample' driver '../driver/lib/sample.so' ================================================================= ==2511090==ERROR: AddressSanitizer: odr-violation (0x7f9e15d78d00): [1] size=8 'dns_lctx' log.c:69:33 [2] size=8 'dns_lctx' log.c:69:33 These globals were registered at these points.. 2023. 1. 20.
std::map 올바르게 사용하기 | 아이템 삭제 방법 std map 올바른 사용법 std::map map 을 사용할 때 생각보다 어이없는 부분에서 문제가 발생한다. 쉽게 생각하고 넘기지만 프로그램이 종료되기도 하기 때문에 정확히 알고 사용하는 것이 중요하다. 결론 요약 정리 - insert를 할 때 : 틀린 방법: map.at(key)= new A() 옳은 방법: map[key] = new A() -> 위의 틀린 방법으로 아이템을 추가할 경우, at 은 내부적으로 바운더리 체크가 있기 때문에 out of range exception이 발생하게 된다. at()은 아이템에 접근할 때만 사용한다. -> operator[ ]는 아이템에 접근하고 추가할 때 모두 사용할 수 있다. - 삭제할 때: 틀린 방법: delete map[key] 옳은 방법: auto valu.. 2022. 12. 29.
[C++] 함수를 매개변수로 전달하는 방법 함수란? 함수는 input을 받아서 특정 컴퓨터 연산을 수행하고 output을 생산하는 집합체이다. 함수를 사용하는 이유 함수를 사용하는 이유는 공통적이고 반복적인 작업을 함께 수행하기 위함이다. 즉, 각 input에 따라 같은 코드를 반복적으로 작성하는 것을 피하기 위해서 함수를 사용한다. 함수의 형태 일반적인 함수의 형태는 아래와 같다. return_type function_name([ arg1_type arg1_name, ... ]) { // Perform Operations } 함수를 매개변수로 전달하는 것은 C++에서 매우 유용한 개념이다. 이 개념은 std::sort() 함수에서 커스텀 비교 함수를 매개변수로 전달할 때부터 사용해왔다. 이 게시글에서 우리는 다른 함수를 매개변수로 전달받는 함수.. 2022. 11. 18.
반응형