https://drunkenpsycho.tistory.com/13*
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
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