전역 신규 및 삭제 연산자를 효과적으로 대체
문제:
전역 new 및 삭제 연산자 교체 사용자 정의 메모리 관리를 사용하는 삭제 연산자는 대규모 코드베이스에서 문제를 야기합니다. 모든 파일에 오버로드가 포함된 헤더 파일을 포함하는 것은 비현실적입니다. 이러한 오버로드의 보편적인 채택을 어떻게 보장할 수 있습니까?
해결책:
new 및 delete 연산자 재정의는 링크 타임에 수행되는 프로세스입니다. 연산자를 정의하는 별도의 번역 단위(TU)를 생성하고 이를 프로젝트에 연결하면 기존 코드베이스를 수정하지 않고도 기본 연산자를 전체적으로 대체할 수 있습니다.
코드 샘플:
다음은 new 및 delete 연산자를 정의하는 TU의 예입니다.
<code class="cpp">// optional_ops.cpp void * operator new(std::size_t n) throw(std::bad_alloc) { //... } void operator delete(void * p) throw() { //... }</code>
C 11 이상에 대한 대안:
C 11 decltype(sizeof(0))을 사용하여 크기 매개변수의 유형을 결정함으로써 새 오버로드를 정의하는 더 간단한 방법을 소개합니다.
<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false) { //... }</code>
위 내용은 대규모 코드베이스에서 전역 'new' 및 'delete' 연산자를 보편적으로 재정의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!