본문 바로가기

C++

OpenCV 공부를 위한 C++ 공부 #1

https://drunkenpsycho.tistory.com/13*

 

[C/C++] malloc과 new의 차이점 과 Stack Heap

우리는 C와 C++에서 동적 할당을 위해 malloc 함수와 new 키워드를 자주 쓴다. 실제로 malloc과 new 모두 Heap 메모리에 저장 되는 경우가 많다. 하지만 Stack 메모리에 저장되는 경우도 있다. 오늘은 malloc�

drunkenpsycho.tistory.com

 

1. 메모리를 할당해서 사용했으면 해제도 꼭 해줘야 할 것.

garbage collector 같은 기능이 없기 때문에 해야 함.

 

2. C++에서는 malloc, free와 비슷한 new, delete라는 키워드를 제공함

객체 생성 시에(아마 객체를 인스턴스화 할 때) new 키워드를 사용해야 함.

사용법

int *a = new int(1234);

delete a;

 

이제 알아보려 했던 내용

3. malloc / new 차이점

 

1) malloc은 기본적으로 라이브러리 제공 함수로, 함수 콜을 요청하지만, new는 C++에서 기본 제공하는 키워드로 별도의 라이브러리 추가 없이 바로 사용 가능함.

 

2) malloc은 int *a = (int*)malloc(sizeof(int))*사용할 크기처럼 사용하지만 new는 할당할 타입을 지정하면 알아서 할당할 타입의 포인터로 넘어온다.

 

3) malloc은 메모리를 동적으로 할당하는 것만이 목적이므로 초기값을 지정해 줄 수 없지만, new의 경우는 할당과 동시에 초기화가 가능하다.

 

4) new 키워드는 생성자를 자동으로 호출하게 된다. 생정자는 객체를 자동으로 초기화해주는 함수로, malloc과 new의 가장 큰 차이점이다.

 

5) malloc은 realloc을 통해 재할당이 가능하지만, new에는 realloc에 대응하는 것이 없기 때문에, 새로 할당 -> 복사 -> 해제하는 과정을 거쳐야 한다. 하지만 할당 대상이 어디까지나 객체가 아니라는 전제하에서다. 객체는 반드시 new / delete 를 사용해야한다. 하지만 객체가 아니고, 재할당이 빈번하게 일어나야된다면, malloc과 free가 오히려 더 좋은 선택이 될 수 있다.

 

 

https://boycoding.tistory.com/207

 

C++ 07.15 - 참조형 변수 (Reference variable)

참조형 변수 (Reference variable) 지금까지 두 가지 변수 타입을 공부했다. 일반 변수(normal variable): 직접 값을 보유. 포인터(pointer): 다른 값의 주소(또는 null)를 보유. 참조형(reference)은 C++에서 지..

boycoding.tistory.com

 

1) 참조형 변수는 참조되는 객체의 별칭으로 사용된다.

 

2) 참조형 변수는 항상 선언시 초기화 해줘야하며, const 값 또는 r-value 값 및 null로 초기화할 수 없다.

(여기서 l-value는 메모리 주소를 가진 객체이고 r-value는 메모리 주소가 없고, 표현식 범위에만 있는 값이다.)

 

int x = 5; 
int& ref1 = x; // okay, x is an non-const l-value 

const int y = 7; 
int& ref2 = y; // not okay, y is a const l-value 

int& ref3 = 6; // not okay, 6 is an r-value

 

3) 참조형 변수는 초기화된 후에는 다른 변수를 참조하도록 변경할 수 없다.

 

4) 참조될 변수가 꼭 참조형일 필요는 없다.

 

제일 궁금했던

5) 참조형은 접근할 때 암시적으로 역참조되는 포인터와 같은 역할을 한다. (참조형은 내부적으로 포인터를 사용하여 컴파일돼서 구현된다.)

 

참조형은 선언과 동시에 유효한 객체로 초기화해야 하고, 일단 초기화되면 변경할 수 없으므로 포인터보다 사용하는 것이 훨씬 안전하다. ( 널 포인터를 역참조하면 위험하다.)

 

주어진 문제가 참조형과 포인터 둘 다로 해결할 수 있다면 참조형을 사용하는게 더 좋다.

 

 

https://boycoding.tistory.com/181?category=1006674

 

C++ 01.13 - 여러 가지 변수 초기화 방법 (variable initialization)

01.13 - 여러 가지 변수 초기화 방법 (variable initialization) 변수가 정의될 때, 즉시 해당 변수에 값을 지정할 수 있다. 이를 변수 초기화(variable initialization) 또는 짧게 초기화(initialization)라고 한..

boycoding.tistory.com