** visual studio 2013 컴파일


string 객체 할당

std::basic_string<char,std::char_traits<char>,std::allocator<char>>::basic_string<char,std::char_traits<char>,std::allocator<char>>(&mystring,'123')


string 객체 해제

std::basic_string<char,std::char_traits<char>,std::allocator<char>>::~basic_string<char,std::char_traits<char>,std::allocator<char>>(&mystring3);


operator new : c++에서만 쓸수 있는 객체지향적이면서 heap에 메모리를 할당하는 malloc과 비슷한 함수(linux기준 new함수 내부에서 malloc을 호출한다고 한다.)


<펌>http://drunkenpsycho.tistory.com/13


3. malloc / new 차이점


  C++에서는 기본적으로 malloc과 new 모두 사용이 가능하다. 그렇다면 차이점은 어떤 것이 있고, 어떠한 경우에 malloc이나 new를 선택하느냐를 알아보자.

  1) malloc은 기본적으로 라이브러리 제공 함수로, 함수 콜을 요청하게 된다. 하지만, new는 C++ 언어에서 제공하는 기본 키워드로, 별도의 라이브러리 추가없이 바로 사용이 가능하다.

  2) malloc은 기본적으로 사이즈를 매개변수로 받고, 리턴타입이 void *형이므로 sizeof 와 캐스트 연산자의 도움을 받아야 쉬운 코딩이 가능하다. 하지만 new는 할당할 타입을 지정하면, 알아서 할당할 타입의 포인터로 넘어오기 때문에, 할당할 타입과 같은 타입의 포인터 변수로 받아오기만 하면 끝이다.

  3) malloc은 메모리를 동적으로 할당하는 것만이 목적이므로 초기값을 지정해 줄 수 없지만, new의 경우는 할당과 동시에 초기화가 가능하다. 

  4) new 키워드는 생성자를 자동으로 호출하게 된다. 생성자는 객체를 자동으로 초기화 해주는 함수로, malloc과 new의 가장 큰 차이점이다. 

  차이점만 본다면, malloc은 없어도 new만 가지고도 쉽게 쉽게 코딩이 가능하다. 하지만 malloc이 필요한 경우 또한 분명히 존재한다. malloc의 경우에는 realloc이라는 함수로 재할당이 가능하지만, new에는 realloc에 대응하는 것이 없기 때문에, 새로 할당 -> 복사 -> 해제 하는 과정을 해야만 가능하다. 하지만, 할당 대상이 어디까지나 객체가 아니라는 전제하에서다. 객체는 반드시 new / delete 를 사용해야된다. 하지만 객체가 아니고, 재할당이 빈번하게 일어나야된다면, malloc과 free가 오히려 더 좋은 선택이 될 수도 있다.

  C에서는 동적 할당이 malloc 밖에 없지만, C++에서는 두가지 중 선택할 수 있으므로, 사용자의 입맛에 따라 어느 것을 사용해도 무방하다. 단, 할당 해제는 반드시 짝을 맞춰서 써야한다. new로 할당 했다면 delete로 해제하고, malloc으로 할당했다면 free로 해제해야만 한다.


'프로그래밍 > C, C++' 카테고리의 다른 글

c c++reference  (0) 2016.06.21

c언어 관련 reference 사이트



www.cplusplus.com

'프로그래밍 > C, C++' 카테고리의 다른 글

[C++]분석 일지 (1)  (0) 2017.02.22

+ Recent posts