दौरान बदलने का प्रकार मैं सिर्फ निम्नलिखित व्यवहार discoverd: प्रकार B
प्रकार A
से प्राप्त की एक वस्तु हो रही है, A
के निर्माण के दौरान अंतिम प्रकार A
और नहीं B
है। यह निम्न उदाहरण के साथ मनाया जा सकता है:एक वस्तु निर्माण
#include <iostream>
#include <typeinfo>
class A
{
public:
A() { std::cout << &typeid(*this) << std::endl; }
};
class B : public A
{
public:
B() : A() { std::cout << &typeid(*this) << std::endl; }
};
int main()
{
A a;
B b;
return 0;
}
इस कोड (जीसीसी 4.8.5 के साथ संकलित) के एक रन निम्नलिखित है:
0x400ae0
0x400ae0
0x400ac0
हम देख सकते हैं कि प्रकार में typeid द्वारा लौटाए गए A::A()
A
है और B
नहीं है, और फिर अंतिम प्रकार B
बनने के लिए बदल जाता है।
क्यों?
क्या माता-पिता वर्ग के निर्माण के दौरान "असली" अंतिम प्रकार जानना संभव है?
मैं एक माता पिता के वर्ग Resource
और कई वर्गों यह से इनहेरिट है:
मेरे संदर्भ निम्नलिखित है। मेरे पास संसाधन के प्रत्येक निर्माण द्वारा अधिसूचित ResourceManager
भी है, और बनाए गए संसाधन के अंतिम प्रकार को जानना है। क्या मैं डुप्लिकेट किए गए कोड से बचने के लिए कर रहा हूँ निम्नलिखित है, लेकिन यह काम नहीं करता है:
class Resource
{
public:
Resource() { ResourceManager::notifyCreation(*this); }
~Resource() { ResourceManager::notifyDestruction(*this); }
};
class MyResource : public Resource
{
// I don't have to care to the manager here
};
मैं जानता हूँ कि मैं एक निर्माता में बच्चों के/नाशक अधिसूचना कर सकते हैं, लेकिन यह कम मजबूत है (संभव बग यदि प्रबंधक को अधिसूचना के बिना संसाधन को तत्काल किया जाता है)। क्या आपके पास कामकाज के लिए कोई विचार है?
उम्म ... 'और टाइपिड (....)' ?? – WhiZTiM
'* यह 'ए' में हमेशा' ए' है, आप 'टाइपिड' अलग होने की अपेक्षा क्यों करते थे? –
@WhiZTiM क्यों? टाइपिड का रिटर्न वैल्यू प्रत्येक प्रकार के लिए मेमोरी में अद्वितीय है। – Caduchon