मैंने सी ++ में एक इंटरफ़ेस परिभाषित किया है, यानी एक वर्ग जिसमें केवल शुद्ध वर्चुअल फ़ंक्शन हैं।जीएनयू कंपाइलर चेतावनी "कक्षा में वर्चुअल फ़ंक्शंस हैं लेकिन गैर-आभासी विनाशक"
मैं स्पष्ट रूप से इंटरफ़ेस करने के लिए एक सूचक के माध्यम से वस्तु को हटाने के लिए इंटरफ़ेस के उपयोगकर्ताओं न करे करना चाहते हैं, तो मैं इंटरफेस के लिए एक सुरक्षित और गैर आभासी नाशक की घोषणा की, कुछ की तरह:
class ITest{
public:
virtual void doSomething() = 0;
protected:
~ITest(){}
};
void someFunction(ITest * test){
test->doSomething(); // ok
// deleting object is not allowed
// delete test;
}
जीएनयू संकलक मुझे यह कहते हुए एक चेतावनी देता है:
वर्ग 'ITest' आभासी कार्यों लेकिन गैर आभासी नाशक है
एक बार विनाशक संरक्षित होने के बाद, इसे आभासी या गैर-आभासी होने में क्या अंतर है?
क्या आपको लगता है कि इस चेतावनी को सुरक्षित रूप से अनदेखा या चुप किया जा सकता है?
मेरा मानना है कि यह केवल एक चेतावनी है - और उपर्युक्त मामला असाधारण है। सामान्यतः यदि आपके पास वर्चुअल फ़ंक्शंस हैं तो शायद आपके पास आभासी विनाशक भी होना चाहिए। –
मैं मानता हूं कि यह एक मामूली बग है कि एक संरक्षित विनाशक की उपस्थिति में चेतावनी दबाने नहीं है। व्युत्पन्न वर्ग द्वारा हटाने का उल्लेख करने वाले अन्य उत्तरों मान्य हैं, लेकिन नियमित रूप से अनुपलब्ध वर्चुअल विनाशकों की तुलना में समस्याग्रस्त होने की संभावना बहुत कम है। –
हर्ब के लेख के लिंक के लिए धन्यवाद! –