का उपयोग कर के रूप में दिखाया गया है here का पता चला है, एक dynamic_cast
उपयोग कर सकते हैं किसी हटाए सूचक पता लगाने के लिए:कैसे एक सूचक का विलोपन गतिशील डाली
#include <iostream>
using namespace std;
class A
{
public:
A() {}
virtual ~A() {}
};
class B : public A
{
public:
B() {}
};
int main()
{
B* pB = new B;
cout << "dynamic_cast<B*>(pB) ";
cout << (dynamic_cast<B*>(pB) ? "worked" : "failed") << endl;
cout << "dynamic_cast<B*>((A*)pB) ";
cout << (dynamic_cast<B*>((A*)pB) ? "worked" : "failed") << endl;
delete pB;
cout << "dynamic_cast<B*>(pB) ";
cout << (dynamic_cast<B*>(pB) ? "worked" : "failed") << endl;
cout << "dynamic_cast<B*>((A*)pB) ";
cout << (dynamic_cast<B*>((A*)pB) ? "worked" : "failed") << endl;
}
उत्पादन:
dynamic_cast<B*>(pB) worked
dynamic_cast<B*>((A*)pB) worked
dynamic_cast<B*>(pB) worked
dynamic_cast<B*>((A*)pB) failed
ऐसा नहीं है कि बताते हैं vtable का विलोपन पता चला है।
लेकिन मुझे आश्चर्य है कि यह कैसे संभव है क्योंकि हम मुक्त स्मृति को ओवरराइट नहीं करते हैं?
और क्या यह समाधान पूरी तरह से पोर्टेबल है?
धन्यवाद
मैं अनुमान लगा रहा हूं कि 'गतिशील_कास्ट' का उपयोग [RTTI] (http://en.wikipedia.org/wiki/Run-time_type_information) का उपयोग करने के लिए किया जा रहा है। –
मुझे संदेह है कि यह मंच निर्भर व्यवहार है। –
विजुअल स्टूडियो 2013 इस कोड के साथ '__non_rtti_object' अपवाद फेंकता है। –