• new operator, operator new, placement new

    2014. 7. 18.

    by. xxx123

     

     

     

     

     

    new operator, operator new, placement new

    생소한 용어도 있고 헷갈리기도 한 용어도 있다.

     

    각 차이를 설명하기 전에 객체를 생성할 때 발생하는 두 가지 과정에 대해 먼저 설명을 하자면.

    ① 객체를 저장하기 위해 메모리를 할당한다.

    ② 생성된 객체를 초기화한다.

     

    우리는 아무렇지 않게 이 두 과정을 Test* test = new Test() 와 같은 문법으로 한번에 수행하고 있는 것이다.

    그럼 다음으로 위의 각 용어에 대해 설명을 하겠다.

    일단 예제를 위해 다음과 같은 클래스를 하나 만든다.

     

     

     

     

     

     

    1. new operator

    말 그대로 우리가 흔히 사용하는 new 라고 보면 된다.

    위에서 설명한것과 마찬가지로 객체 생성을 위한 메모리 할당과  객체의 초기화를 동시에 수행한다.

     

     

     

     

     

     

     

    2. operator new

    원하는 사이즈 만큼의 메모리를 할당 해주고 해당 포인터를 리턴한다.

    overload 될 수 있으며, 객체의 초기화는 하지 않는다.

    malloc() 함수와 동일하다고 볼 수 있다.

     

     

     

     

     

     

     

     

    3. placement new

    지정 할당자라는 말을 쓰는 곳이있는데, 실제로는 할당이 아닌 객체의 초기화를 수행한다.

    malloc으로 메모리 할당 후 해당 객체의 생성자를 호출할 필요가 있을 때 사용되어 진다. (객체의 생성자는 함수 호출로 호출이 불가능하다. 하지만 소멸자는 가능)

    사용법은 new 다음에 할당된 메모리의 포인터를 넘기고, 해당 객체의 생성자 함수를 호출하며 인자를 넘기면 된다.

    예제는 위에꺼에 이어서 보면 된다.

     

     

     

     

     

     

     

     

    'Programming > C/C++' 카테고리의 다른 글

    Virtual Table (가상함수 테이블)  (0) 2014.12.18
    inline  (0) 2014.12.17
    CreateThread & _beginthreadex  (0) 2014.11.02
    shared_ptr  (0) 2014.06.20
    템플릿 템플릿 인자  (0) 2013.09.27

    댓글