2
하위 클래스에서 연산자 new/delete가 오버로드되고 있습니다. 그리고 저에게 다소 이상한 것처럼 보이는 동작을 감지하고 있습니다. 비주얼 스튜디오 2010 컴파일 할 때오버로드 된 연산자가 새롭고 일치하는 삭제
#include <stdlib.h>
#include <stdio.h>
class Base
{
public:
virtual ~Base()
{
}
};
class Derived : public Base
{
public:
void* operator new(unsigned int size, int capacity)
{
printf("> new(unsigned int, int)\n");
return malloc(sizeof(Derived));
}
void operator delete(void* ptr, int)
{
printf("> delete(void*, int)\n");
free(ptr);
}
void operator delete(void* ptr)
{
printf("> delete(void*)\n");
free(ptr);
}
};
int main(int argc, char** argv)
{
Base* base = new (0) Derived();
delete base;
return 0;
}
이 코드는 다음과 같은 출력을 생성합니다 : 아래의 예제 코드를 살펴
> new(unsigned int, int)
> delete(void*)
가 왜 일치 여기라는 가져 오지 연산자 (
Derived::operator delete(void*, int)
)을 삭제한다? 내가 뭘하든 관계없이 일치하는 연산자를 호출하도록 코드를 가져올 수는 없습니다.