C++에서 new와 malloc의 차이점은 무엇인가요?

linuxs의 이미지

C++에서 new와 malloc의 차이점이 무엇인지 궁금하군요?
오늘 코딩을 하는데 클래스 A 타입의 a를 포인터로 선언하고 A만큼 할당할려고 했는데 실행중 malloc에서는 에러가 발생했고 new로 했을경우는 발생하지 않았습니다.
문서를 찾아보니 malloc은 힙영역에 메모리를 할당하고 기타 정적인 변수는 스텍에 할당된다고 하네요.. new로 할당해서 힙에 할당되겠죠? 이런 문제는 아닌것같고 타입때문에 그런것 같은데..
조언부탁드립니다.

예)
A *a
a=(A *)malloc(sizeof(A))

a->in() <-- 이부분에서 에러 in이라는 함수는 A 클래스 안에 있는 함수

++++++++++++++++++++++++++++++++++++++++++++

A *a
a=new A

a->in() <-- 에러 발생하지 않음

익명 사용자의 이미지

C++에서는 malloc를 쓸 필요가 없으며 써서도 안됩니다. 클래스가 만들어질 때에는 단순한 메모리 할당만 이루어지는 것이 아니라 생성자 호출 및 기타 복잡한 동작들이 이루어지기 때문입니다. C++에서 malloc는 잊어버리십시오.

pynoos의 이미지

C++에서 new 연산은 malloc 한뒤 this에다가 할당받은 값을 넣고 생성자 함수를 부른다고 생각하시면 됩니다.

구현상 new는 c의 malloc을 기반으로 만들어지게 됩니다. 같은 heap manager를 사용해야하기 때문이지요.

익명 사용자의 이미지

예전 부터 궁금해왔던건데.. new로 할당한 변수를 재할당 하려면 어떻게 하나요?
c에서는 malloc -> realloc을 썼었는데...new는 모르겠네요...

비행소년의 이미지

realloc을 사용해야 하는 경우처럼 메모리를 재 할당해야 하는 경우가 생길 수 있다면.

표준 템플릿 라이브러리를 사용하시길 권합니다.

상황에 따라서 list, vector, deque, set을 골라서 사용하시면 됩니다.

vector만 익숙해져도 많은 골치꺼리에서 해방이 될 수 있습니다. :D

높이 날다 떨어지면.
아푸다 ㅡ,.ㅡ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.