>백엔드 개발 >C++ >C에서 전역 `new` 및 `delete` 연산자를 어떻게 재정의할 수 있습니까?

C에서 전역 `new` 및 `delete` 연산자를 어떻게 재정의할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-30 03:12:03937검색

How Can I Override the Global `new` and `delete` Operators in C  ?

전역 연산자 재정의: new 및 delete 교체

복잡한 코드베이스에서는 사용자 정의 new 및 delete 연산자를 일관되게 사용하는 것이 어려울 수 있습니다. 한 가지 문제는 외부 라이브러리 및 STL 사용이 사용자 정의 메모리 관리를 우회할 수 있다는 것입니다.

여러 파일에 오버로드를 포함하는 대신 전역 교체를 수행할 수 있습니다. 이러한 연산자를 정의하는 별도의 번역 단위(TU)를 연결합니다. 이 TU는 다음 기능을 제공합니다:

<code class="cpp">void * operator new(std::size_t n) throw(std::bad_alloc);
void operator delete(void * p) throw();</code>

또는 유사한 헤더가 표준 라이브러리 이름을 확인하는 데 필요할 수 있습니다. C 11 이상에서는 decltype(sizeof(0))이 std::size_t를 대체할 수 있으며 동적 예외 사양은 생략할 수 있습니다.

<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false);</code>

이 TU를 연결하면 사용자 정의 new 및 delete 연산자가 전체적으로 활성화됩니다. 일관된 사용과 향상된 진단 기능을 보장합니다.

위 내용은 C에서 전역 `new` 및 `delete` 연산자를 어떻게 재정의할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.