boost :: checked_delete의 목적을 이해하지 못합니다./5 5.3.5가, 불완전 클래스 유형 포인터가 삭제 표현과 삭제에,boost :: checked_delete 목적
C++ 표준이 있습니다 : 문서를 말한다. 클래스에 소멸자 소멸자가 있거나 클래스 별 연산자 삭제가있는 경우 동작은 으로 정의되지 않습니다. 일부 컴파일러에서는 불완전 유형이 일 때 경고를 발행하지만, 불행히도 이 모두있는 것은 아니며 프로그래머가 을 무시하거나 경고를 비활성화 할 수 있습니다.
제공되는 기능과 클래스 템플릿은 완전한 유형을 필요로,이 문제를 방지하고, 그렇지 않으면 컴파일 오류 을 야기 할 수 있습니다.
따라서 C++ 표준에서는 형식이 중요하지 않은 소멸자가있는 경우 정의되지 않은 동작을 일으키는 불완전한 형식을 삭제할 수 있습니다. 뭐? 불완전한 타입은 어떻게 소멸자를 가질 수 있습니까? 불완전한 유형이 단지 프로토 타입이 아닌가?
// this file does not include the definition of foo
class foo;
void bad(foo *f)
{
delete f; // undefined behavior if there exists foo::~foo
}
현실에서, foo는의 정의는 다음과 같이 보일 수 있습니다 :
슬라이스와 관련이 있습니까? http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c – Cogwheel