2012-08-31 2 views
3

나는 항상 그것이 new을 재정의하는 역할을하는지 궁금해했습니다. 이 말은 개발자가 다음을 사용하는 것을 의미합니다."new"연산자를 재정의하는 목적은 무엇입니까?

#pragma push(macro,new) 
#undef new 

이 서비스는 어떤 용도로 사용됩니까? 나는 새로운 연산자가 모든 컴파일러의 표준이라고 생각했다. new를 재정의하면 개발자가 새로운 방법으로 객체 공간을 할당하는 방법을 변경할 수 있습니까?

+0

가능한 복제본 [기본 새 연산자 및 삭제 연산자를 대체하는 이유는 무엇입니까?] (http://stackoverflow.com/questions/7149461/why-would-one-replace-default-new-and-delete-operators) –

답변

4

C++ 프로그램에서 발생하는 모든 할당을 로그에 남기지 않는 것으로 생각할 수도 있습니다. 따라서이 할당을 기록 할 새로운 작업을 정의해야합니다. 또한 C++로 만든 모든 할당 해제를 기록하기 위해 삭제를 다시 정의해야합니다.

일부 도구는 코드를 다시 정의하고 메모리 블록의 시작과 끝 부분에 헤더와 꼬리의 특정 서명을 할당하여 코드에 대한 버퍼 오버런 문제를 찾아냅니다. MS Application Verifier를 검사 할 수 있습니다.

+0

나는 구조체에 '#pragma pack'을 사용하는 것과 같이 특별한 할당 크기를 만들 수 있도록 새로운 것을 재정의한다고 생각했습니다. 내가 틀렸어. 이 문제를 해결해 주셔서 감사합니다. – 7c00h

관련 문제