[C++] malloc과 new

malloc 과 new

malloc과 new는 C++에서 동적할당을 위해 사용된다. 다만 C++에서 runtime error를 방지하기 위해 malloc을 권장하지는 않는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Record {
int id;
string name;
// ...
};

void use()
{
// p1 may be nullptr
// *p1 is not initialized; in particular,
// that string isn't a string, but a string-sized bag of bits
Record* p1 = static_cast<Record*>(malloc(sizeof(Record)));

auto p2 = new Record;

// unless an exception is thrown, *p2 is default initialized
auto p3 = new(nothrow) Record;
// p3 may be nullptr; if not, *p3 is default initialized

// ...

delete p1; // error: cannot delete object allocated by malloc()
free(p2); // error: cannot free() object allocated by new
}

malloc

malloc은 동적할당을 위해 사용하는 함수이다. 초기화는 하지 않는다. malloc으로 할당한 메모리는 free로 해제를 수행한다.

new

new는 동적할당을 위해 사용하는 키워드이다. 힙에 메모리를 할당해주며 생성자를 호출하고 타입 변환도 수행한다. new로 생성한 메모리는 delete로 해제를 해주어야 한다.

생성자 할당 방법

생성자를 할당하는 방법은 멤버 이니셜라이저와 함수 body로 할당하는 두가지 방법이 있다. 멤버 이니셜라이저는 가독성 향상생성과 동시에 할당이라는 성능상 약간의 이점이 있다. 함수 body로 할당하는 방법은 참조 인스턴스들의 복사를 위해 사용한다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/08/03/Languages/Cplusplus/malloc-new/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.