void 포인터와 관련하여 C와 C++의 차이점을 이해하려고합니다.void 포인터 : C와 C++의 차이
int* p = malloc(sizeof(int));
malloc
때문에 반환 void*
, C++은 C 허용 않는 동안 int*
에 할당 할 수 없습니다 : 다음 C에서 컴파일하지만 C++ (모든 컴파일은 GCC/G ++ -ansi -pedantic -Wall으로 수행) 그. 그러나, 여기
: 아무 불평과
void foo(void* vptr)
{
}
int main()
{
int* p = (int*) malloc(sizeof(int));
foo(p);
return 0;
}
모두 C++와 C는 컴파일. 왜?
K & R2 말 : 오브젝트에
상관 포인터 는 정보의 손실없이
void *
유형으로 변환 할 수있다. 결과가 원래 포인터 유형으로 다시 변환 된 인 경우 원래 포인터는 입니다.
이 모든 것이 합쳐져서 void*
의 변환이 약 C입니다. C++ 표준은 무엇을 지시합니까?
GMan이 오류의 원인을 올바르게 설명합니다. 즉, C++ 코드를 작성하는 경우 malloc/calloc 대신 free/free를 new/new []와 delete/delete를 사용해야합니다. –