malloc/free와 new/delete 차이

2019. 11. 12. 11:43PL/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