리사이클 러 클래스의 객체를 사용하여 객체 만 삭제되는 클래스 (소멸자는 가상 임)를 작성했습니다. 그러나 나는 어느 누구라도 나의 리사이클 러 클래스에 대한 지식이 없어도 그 클래스의 객체를 삭제할 수 있다는 것을 발견했다.액세스를 얻기 위해 C++ 타입 캐스팅
class A
{
public:
A() {qDebug() << "cTor: A";}
protected:
virtual ~A() {qDebug() << "dTor: A";}
};
class B
{
public:
virtual ~B() {cout << "dTor: B";}
protected:
B() {cout << "cTor: B";}
};
A *a = new A;
delete (B*)a; // How is this possible !!??
출력 :
다음과 같은 예를 고려해보십시오
cTor: A
dTor: A
가능한 경우를 나는 A
의 소멸자가 아닌 가상의 마지막 서브 클래스를하지 않고이 문제를 방지하기 위해 무엇을 할 수 있는가?
'delete (B *) a; // 이것이 가능한 방법 !! 올바른 캐스트 (예 :'static_cast <>')를 사용해 보면 알 수 있습니다. –
@ πάντα 예 ..하지만 msvC++ 12 및 mingw 4.92에서 모두 작동하는 이유는 무엇입니까? – SaMax
정의되지 않은 동작은 정의되지 않은 동작입니다. 정말 아무것도 작동하지 않습니다. –