malloc/free와 new/delete 차이
2019. 11. 12. 11:43ㆍPL/C++
malloc/free와 new/delete의 공통점은 heap 영역에 메모리를 할당하고 해제하는 함수다
기본적으로 태생을 살펴보면 malloc/free는 glibc 라이브러리 함수다
하지만 new/delete는 특정 헤더파일 안에서 동작하는 함수가 아니라 기본적으로 C++ 언어에서 제공되는 연산자다
둘의 가장 큰 차이점은 malloc/free는 클래스의 생성자/소멸자를 호출하지 못하지만, new/delete는 호출한다는 점이다
new/delete로 생성하면 생성자/소멸자가 모두 호출되는 점을 알 수 있다
#include <cstdlib>
#include <iostream>
using namespace std;
class A {
private:
int num;
public:
A() {
num = 3;
cout << "hello world\n";
}
~A() {
cout << "bye world\n";
}
void print() {
cout << "print hello world\n";
cout << "num : " << num << '\n';
}
};
int main(void) {
A *a = new A();
a->print();
delete a;
return 0;
}
하지만 malloc/free를 이용해서 클래스를 생성하면 생성자, 소멸자가 호출되지 않음을 볼 수 있다
#include <cstdlib>
#include <iostream>
using namespace std;
class A {
private:
int num;
public:
A() {
num = 3;
cout << "hello world\n";
}
~A() {
cout << "bye world\n";
}
void print() {
cout << "print hello world\n";
cout << "num : " << num << '\n';
}
};
int main(void) {
A *a = (A *)malloc(sizeof(A));
a->print();
free(a);
return 0;
}
'PL > C++' 카테고리의 다른 글
함수포인터가 쓰이는 경우 (0) | 2019.11.13 |
---|---|
포인터 배열과 배열 포인터 (0) | 2019.11.13 |
cin으로 방어적 프로그래밍 (0) | 2019.10.31 |
std::array와 std::vector 차이 (0) | 2019.10.30 |
디버깅으로 쓰이는 assert (0) | 2019.10.30 |