본문 바로가기

Language/C++

POD / Standard Layout Type / Trivial Type POD(Plain Old Data) 메모리 상에서 연속적인 바이트열을 뜻한다. 실행시간 다형성이나 유저가 정의한 copy constructor등과 같은 진보된 constructor 문법이 필요없을때 객체를 POD로 취급한다. POD로 취급하게되면 하드웨어에서 좀더 효율적으로 객체를 옮기거나 복사할 수 있다. 즉 POD는 class layout이나 user가 정의한 constructor, copy, move constructor등의 복잡성에 대한 고려없이 data 자체로 취급할 수 있는 객체이다. POD객체는 다음 조건을 갖춰야 한다. 표준 레이아웃 타입(Standard layout type)이어야 한다. 간단한 타입(Trivial type)이어야 한다. Standard layout type 기본적으로 s..
객체초기화 ' = ' , ' ( ) ' 의 차이점 객체 초기화시 ( '=' ) 와 ( '( )' )의 차이점 ' = ' 사용 기본 생성자 호출 후에 초기화기본 생성자를 호출 하고 복사대입연산자 ' = ' 를 호출한다. ' ( ) ' 사용 기본생성자의 인자로 초기화값을 사용복사생성자를 한번만 호출, 효율적이다. P.S)Test T = new Test;Test T2 = new Test( ); Test의 생성자가 default 생성자일 경우 위 2줄의 차이점 T의 경우 객체가 초기화 되지 않음T2의 경우 POD이기 때문에 0으로 초기화가 됨
const / #define / constexpr 차이점 const read only data memory에 할당됨 = 주소를 직접 건들이면 const값 변경가능 type을 명시적으로 기록해서 조금 더 안전하다. #define와 같은용도로 사용된 const의경우 release로 build하면 compiler가 자동으로 삭제해준다. const는 값에 대해서만 한정지을 수 있어 충분히 compile time에도 할 수 있는 연산도 run time에 해야한다. #define 메모리에 올라가지 않음 = 임베디드처럼 memory가 부족한 곳에서는 사용해야한다. type을 기록하지 않음 초기 C언어에서 const가 없을때 사용했었음 constexpr 변수 함수, 클래스를 compile time에 정수로 사용할 수 있다. 즉 상수로 취급할 수 있는 작업은 compile t..
Smart Pointer Smart Pointer(RAII객체, 클래스) RAII(Resource Acquisition Is Initialization) C++에서 자주 쓰이는 idiom으로 resource의 안전한 사용을 위해 객체가 쓰이는 scope를 벗어나면 자원을 해제해 주는 기법이다.heap에 쌓이는 자원은 명시적으로 해제해주지 않으면 memory leak이 발생하는데stack에서 사용되는 자원은 명시적으로 해제해주지 않아도 자신의 scope가 종료되면 자동으로 해제된다는 원리를 이용한것 unique_ptr 하나의 smart pointer만이 특정 객체를 소유할 수 있도록, 객체에 소유권 개념을 도입한 smart pointer해당 객체의 소유권을 가지고 있을때만 소멸자가 해당 객체를 삭제할 수 있음move( )함수로 소..
Pointer / Reference 차이점 우선 reference도 결국 내부적으론 Pointer를 사용하므로 작동원리는 동일하다.하지만 차이점이 몇가지 존재한다. Pointer 1) null값 허용2) int *p = &a; // 대상의 주소값을 할당3) 참조대상 변경가능 Reference 1) null값 불가능2) int &p = a; // 참조 대상을 그대로 할당3) 참조대상 변경불가 C++는 기본적으로 함수로부터 객체를 전달받거나 함수에 객체를 전달할 떄Call by value 방식을 사용 이는 복사생성자로 인한 고비용의 연산, 함수 매개변수는 실제 인자의 사본을 통해 초기화, 어떤 함수를 호출한 쪽은그 함수가 반환한 값의 사본을 돌려받음사본 만들어 내는곳 = 복사생성자 Call by reference 사용시 객체 그대로를 전달하기 떄문에..