나는 잠시 동안 pointer = new type[size]
을 사용했으며 방금 malloc
을 발견했습니다.malloc 대 새로운 사용
malloc
과 new
사이에 기술적 인 차이가 있습니까? 그렇다면, 다른 것을 사용하는 것의 이점은 무엇입니까?
나는 잠시 동안 pointer = new type[size]
을 사용했으며 방금 malloc
을 발견했습니다.malloc 대 새로운 사용
malloc
과 new
사이에 기술적 인 차이가 있습니까? 그렇다면, 다른 것을 사용하는 것의 이점은 무엇입니까?
malloc
은 함수 호출이며이 경우에는 새로운 표현식입니다.
차이점은 다음과 같습니다. new
은 메모리를 할당하고 해당 배열의 모든 요소를 기본 생성자로 구성합니다. malloc
그냥 초기화되지 않은 메모리 덩어리를 제공합니다.
::operator new
은 std::bad_alloc
또는 새 처리기가 등록되어있는 경우이를 처리합니다.
표준 라이브러리는 추가 매개 변수 nothrow
을 허용하는 새 정의를 정의하며 할당이 실패하면 0 포인터를 반환합니다.
int *x = new(std::nothrow) int[20]; // include <new>, return 0 on failure
당신은 당신의 질문 here
그리고 또 다른 좋은 답을 FAQ를 찾을 수 있습니다 당신은 내가 약하지만, 더 빨리 모두 더 나은 무엇 말했다 In what cases do I use malloc vs new?
. 한 가지만 보았습니다. C#의 오래된 버전에서 free (NULL)가 정의되지 않은 효과를 가지지 만 delete [] NULL은 항상 명시 적으로 안전하다는 점을 기억합니다. 나는 그 사실에 대한 어떠한 증거도 즉시 발견 할 수 없으므로 이것이 내 오해인지 아닌지 궁금해지기 시작했다. – Tommy
Tommy, IIRC free (0)가 정의됩니다. 그래도 C의 고대 버전에 대해서는 모르겠다;) –
실제 사양이 없어도 C99과 아마도 C89에 있음을 알리는 인터넷 검색 결과는 잠재적 인 주장을 무효 화하는 것 이외의 다른 문제가 아니라고 생각한다. delete []는 free보다 안전합니다 ... 새로운/malloc 토론에서 delete와 delete의 구분을 지적 해 주실 가치가 있습니까? 메모리 할당의 두 가지 방법의 기술적 차이점과 마찬가지입니다. – Tommy