내가 할 수 C++ Primer을 읽는 동안이 전역 :할당 자 클래스의 deallocate 메서드를 호출 할 때 포인터가 null이 될 수없는 이유는 무엇입니까?
나는우리가 null 일 수 없습니다 할당을 해제 전달하는 포인터; alloc에 의해 할당 된 메모리는 이어야합니다.
deallocate
의 원인을 확인하고이 발견
// __p is not permitted to be a null pointer.
void
deallocate(pointer __p, size_type)
{ ::operator delete(__p); }
확인을, 그래서 delete
표현과 operator delete()
사이에 구별이 알고있다. delete
표현식은 널 포인터에서 사용할 수 있습니다. 그러나이 함수는 전역 operator delete()
함수를 직접 호출합니다. 그러나, 나는이 문제를 인터넷 검색과 같은뿐만 아니라 글로벌 운영자가 널 포인터에 대한 방법의 검사를 삭제 내용의 블로그 게시물 here을 발견
void
operator delete (void* ptr) throw()
{
if (ptr)
std::free (ptr);
}
는 또한, 아이러니하게도, 나는 또한 here을 발견
A의std::free
를 호출 null 포인터가 아무런 영향을 미치지 않습니다 ... 그럼 내 질문은,
__p
null 포인터가 허용되지 않는 이유는 무엇입니까?
documentation for std::allocator::deallocate
따르면
NULL 포인터에서'delete'를 호출하는 것과 관련하여 C++ 11에서 약간의 변화가있었습니다. 주제에 대한 [내 질문] (http://stackoverflow.com/questions/25329576/calling-delete-on-null-pointers-c03-vs-c11)을 참조하십시오. –
deallocator는 할당하지 않은 메모리를 할당 해제하라는 메시지를 표시 할 수 없습니다. 할당시 NULL을 반환하지 않는 사용자 정의 할당자는 NULL 할당을 요청하지 않는다고 가정 할 수 있어야합니다. – molbdnilo