이들 중 어느 것을 사용해야합니까?char *로 캐스트 된 문자 배열을 삭제합니까?
char *ex = new char[255];
// code
delete [] ex;
또는
char *ex = new char[255];
// code
delete [] (char *) ex;
나는 캐스트가 필요하지 않다고 생각하고 있지만 실제로 삭제에 어떤 영향을 미칠까요?
이들 중 어느 것을 사용해야합니까?char *로 캐스트 된 문자 배열을 삭제합니까?
char *ex = new char[255];
// code
delete [] ex;
또는
char *ex = new char[255];
// code
delete [] (char *) ex;
나는 캐스트가 필요하지 않다고 생각하고 있지만 실제로 삭제에 어떤 영향을 미칠까요?
char *ex = new char[255];
// code
delete [] ex;
캐스트는 필요하지 않습니다. 캐스트는 효과가 없습니다.
C++ 표준에서는 변환을 수행 할 필요가 없습니다. 다음은 참고 자료입니다.
제 §3.7.3.2.3 :
널 포인터 값이 될 수있는 표준 라이브러리에서 제공되는 해제 기능들 중 하나에 공급되는 제 1 인수의 값; 그렇다면 할당 해제 함수를 호출해도 아무런 효과가 없습니다. 표준 라이브러리의
operator delete(void*)
에 제공된 값은 표준 라이브러리의 이전 호출operator new(size_t)
또는operator new(size_t, const std::nothrow_t&)
에 의해 리턴 된 값 중 하나가되어야하며 표준 라이브러리의 연산자delete[](void*)
에 제공된 값은 값 이전 라이브러리가operator new[](size_t)
또는operator new[](size_t, const std::nothrow_t&)
인 표준 라이브러리에서 리턴됩니다.
효과가 없으며 효과가 없습니다. char*
을 char*
번으로 전송 중입니다.
delete []는 많은 개체를 파괴 (또는 파괴) 한 다음 메모리를 해제합니다. 유형이 객체가 아닌 경우 소멸자를 호출하지 않고 메모리를 해제합니다. 이것은 좋은 것 :
class some_class
{
some_class(int);
};
....
some_class *p = new some_class[[2]](0)(1);
delete[] p; // delete calculates how many objects where created, and call destructors of all objects, then frees the memory (which is twice sizeof(some_class)
캐스팅 아무것도하지 않습니다,하지만 피연산자의 유형'[]'두 경우 모두'의 char * '입니다 삭제할 수 있기 때문에 한 경우에도 두 가지 예는 여전히 동일하게 동작한다. – Jon