연산자 오버로드에 대한 인수 목록이 체계적으로 결정되는 방식을 결코 이해하지 못했으며, 지금 당장 가지고있는 문제로 인해 혼란 스럽습니다.운영자 과부하 (특히 '신규') 요인은 어떻게 작동합니까?
단항 연산자에 과부하가 걸리면 하나의 인수가 있거나 클래스 멤버 인 경우 0이됩니다. 2 진 연산자를 오버로드하면 두 개의 인수가 있거나 클래스 구성원 인 경우 하나가 있습니다. 적어도 그것은 그것이 작동하는 것처럼 보일 것입니다. 그러나 operator new
(반원이 아님)에게 문제가 있습니다. 코드베이스에서
#define new new(__FILE__, __LINE__)
및 메모리 디버깅을 위해이 같은 서명
void *new(size_t size, const char *file, unsigned line)
또는 무언가와 해당 기능과 같은 정의가있다 (예를 들어
here 등) . 나는 나의 프로젝트에있는 것이 이전에 링크 된 것과 실제로 다르다는 것을 주목한다. 이것은 어떤 이유로 새로운 배치를 엉망으로 만들기 때문에 나에게는 문제가된다. 내가 보았습니다
C++ 프로그래밍 언어, 그리고 만약 내가 이것을 놓치고 설명합니다.
이와 관련하여 new
이 특별합니까? 즉, 특정 언어로 정의 된 추가 디버그 서명이 있습니까? 위에서 언급했듯이, 나는 다른 곳에서 약간 다른 서명을 보았 기 때문에 그것을 좋아하지 않는다. 그렇다면, 다른 사업자는 명백하지 않은 서명을 갖고 있으며, 그 서명은 무엇입니까? 대신 이러한 다양한 시그니처가 특정 구현 관련 추가 기능입니까? 그렇다면 대부분의 구현이 수행하는 것과 관련된 일반 규칙이 있습니까? 양자 택일로, 그것은 내 타이틀에 내포 한 것처럼 아리안 이슈인가? 서명에서 원하는만큼 추가 인수를 붙일 수 있고 new
키워드 자체와 원하는 새로운 유형 사이의 인수를 사용하여 새로 호출하면 무엇을 할 수 있습니까? 아니면 내가 더 혼란스럽고 내가 놓친 다른 것이 있단 말인가?
가장 중요한 것은 단기간에 (실제로 이것을 이해하고 싶지만) 내 배치를 엉망으로 만들고있는 것이 무엇입니까 new
? 매크로가 확장을 일으키는 것 같습니다 new ("file.cpp", 100) (class_pointer) class_t
. 문제는 괄호 안의 두 그룹일까요, 아니면 다른 것입니까?