मुझे यह प्रश्न तब मिला जब मुझे एक कोड समीक्षा टिप्पणी मिली जिसमें कहा गया था कि वर्चुअल फ़ंक्शन को इनलाइन नहीं होना चाहिए।
मैंने सोचा कि इनलाइन वर्चुअल फ़ंक्शंस उन परिदृश्यों में काम आ सकते हैं जहाँ फ़ंक्शंस को सीधे ऑब्जेक्ट्स पर बुलाया जाता है। लेकिन मेरे दिमाग में काउंटर-तर्क आया - कोई व्यक्ति वर्चुअल को परिभाषित करना चाहेगा और फिर कॉल करने के तरीकों के लिए वस्तुओं का उपयोग करेगा?
क्या इनलाइन वर्चुअल फ़ंक्शंस का उपयोग नहीं करना सबसे अच्छा है, क्योंकि वे लगभग कभी भी विस्तारित नहीं होते हैं?
कोड स्निपेट मैंने विश्लेषण के लिए इस्तेमाल किया:
class Temp
{
public:
virtual ~Temp()
{
}
virtual void myVirtualFunction() const
{
cout<<"Temp::myVirtualFunction"<<endl;
}
};
class TempDerived : public Temp
{
public:
void myVirtualFunction() const
{
cout<<"TempDerived::myVirtualFunction"<<endl;
}
};
int main(void)
{
TempDerived aDerivedObj;
//Compiler thinks it's safe to expand the virtual functions
aDerivedObj.myVirtualFunction();
//type of object Temp points to is always known;
//does compiler still expand virtual functions?
//I doubt compiler would be this much intelligent!
Temp* pTemp = &aDerivedObj;
pTemp->myVirtualFunction();
return 0;
}
pTemp->myVirtualFunction()
इसे गैर-आभासी कॉल के रूप में हल किया जा सकता है, तो इसके पास इनलाइन हो सकती है। यह संदर्भित कॉल g ++ 3.4.2 द्वारा इनबिल्ट है: TempDerived & pTemp = aDerivedObj; pTemp.myVirtualFunction();
आपका कोड नहीं है।