> 백엔드 개발 > C++ > 본문

C에서 `delete`가 자동으로 포인터를 NULL로 설정하지 않는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-24 22:00:18
원래의
456명이 탐색했습니다.

Why Doesn't `delete` Automatically Set Pointers to NULL in C  ?

삭제가 포인터에 자동으로 NULL을 할당하지 않는 이유는 무엇입니까?

C 언어 표준에서는 포인터 값을 NULL로 자동 설정하도록 요구하지 않습니다. 삭제 연산자를 호출한 후. 직관에 어긋나는 것처럼 보일 수 있지만 이렇게 결정한 데에는 몇 가지 이유가 있습니다.

성능

질문에서 언급했듯이 포인터를 NULL로 설정하는 추가 명령은 잠재적으로 특히 성능이 중요한 코드에서 삭제 작업 성능에 영향을 미칩니다.

Const 포인터

또 다른 잠재적인 문제는 일부 포인터가 const로 선언될 수 있다는 것입니다. 이러한 포인터의 경우 삭제 작업 후에 해당 값을 변경하려고 시도하는 것은 불가능합니다. 이러한 포인터에 대해 특별한 경우가 만들어질 수 있다고 주장할 수 있지만 표준은 모든 경우에 포인터 값을 수정하지 않음으로써 일관성을 유지하기로 결정했습니다.

Lvalue가 아닌 인수

삭제 연산자는 rvalue 참조와 같은 lvalue가 아닌 인수를 허용할 수 있습니다. 이러한 시나리오에서는 포인터 값을 수정할 수 없습니다. 이는 모든 인수 유형에 대한 동작의 일관성을 보장하기 위한 표준의 기술적 한계를 제기합니다.

Bjarne Stroustrup의 설명

C의 창시자인 Bjarne Stroustrup이 이 문제를 해결했습니다. 문제:

  • 그는 구현에 자동으로 0이 되는 기능이 포함될 것으로 예상했습니다. 삭제 후 lvalue 피연산자를 사용하지만 이 방식은 널리 채택되지 않았습니다.
  • 그러나 그는 delete의 인수가 항상 lvalue가 아닐 수 있으므로 이 동작을 표준화하는 데 기술적인 어려움이 따른다는 점을 강조합니다.

따라서 C에서 포인터를 삭제해도 자동으로 NULL로 설정되지는 않지만 표준에서는 성능, const 포인터, lvalue가 아닌 인수 및 이러한 결정을 내리기 위해서는 일관성이 필요합니다.

위 내용은 C에서 `delete`가 자동으로 포인터를 NULL로 설정하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿