এটা কি ভুল:
class A {
public:
virtual ~A() = 0;
};
একটি বিমূর্ত বেস বর্গ জন্য?
কমপক্ষে এমএসভিসিতে সংকলিত ... এটি রান টাইমে ক্রাশ হবে?
এটা কি ভুল:
class A {
public:
virtual ~A() = 0;
};
একটি বিমূর্ত বেস বর্গ জন্য?
কমপক্ষে এমএসভিসিতে সংকলিত ... এটি রান টাইমে ক্রাশ হবে?
উত্তর:
হ্যাঁ. আপনি ধ্বংসকারী বাস্তবায়ন করতে হবে:
class A {
public:
virtual ~A() = 0;
};
inline A::~A() { }
যথেষ্ট করা উচিত
এবং যেহেতু এটি একটি ডাউন ভোট পেয়েছে, আমার স্পষ্ট করে দেওয়া উচিত: আপনি যদি এ থেকে কিছু পান এবং তা মুছতে বা নষ্ট করার চেষ্টা করেন, A
অবশেষে এর ধ্বংসকারীকে ডাকা হবে। যেহেতু এটি খাঁটি এবং এর বাস্তবায়ন নেই, তাই অনির্ধারিত আচরণ দেখা দেবে। একটি জনপ্রিয় প্ল্যাটফর্মে, এটি খাঁটি কলকারী হ্যান্ডলার এবং ক্র্যাশকে অনুরোধ করবে।
সম্পাদনা করুন: http://www.comeaucomputing.com/tryitout/ এর সাথে সংকলিত, আরও ঘোষিত ঘোষণাটি স্থির করে
ব্যক্তিগত ডেস্ট্রাক্টর: আপনি যখন কোনও উদ্ভূত শ্রেণীর কোনও বস্তু তৈরি করেন তখন তারা আপনাকে একটি ত্রুটি দেবে - অন্যথায় নয়। যদিও ডায়াগনস্টিক উপস্থিত হতে পারে।
12.4 ধ্বংসকারী
6 একজন ডেস্ট্রাক্টরকে ভার্চুয়াল (10.3) বা খাঁটি ভার্চুয়াল (10.4) হিসাবে ঘোষণা করা যেতে পারে; প্রোগ্রামে যদি সেই শ্রেণি বা কোনও উত্পন্ন শ্রেণীর কোনও অবজেক্ট তৈরি করা হয় তবে ধ্বংসকারীকে সংজ্ঞায়িত করা হবে।
খাঁটি ভার্চুয়াল ডেস্ট্রাক্টর সহ একটি শ্রেণি একটি বিমূর্ত শ্রেণি। ভাল করে লক্ষ্য কর:
10.4 বিমূর্ত ক্লাস
2 একটি খাঁটি ভার্চুয়াল ফাংশন কেবল সংজ্ঞায়িত করা যেতে পারে যদি ডাকা হয়, বা যেমন (12.4), যোগ্য-আইডি সিনট্যাক্স (5.1) দিয়ে থাকে।
[ দ্রষ্টব্য : কোনও ফাংশন ঘোষণাপত্র একটি বিশুদ্ধ-নির্দিষ্টকারী এবং সংজ্ঞা সংজ্ঞা উভয়ই সরবরাহ করতে পারে না]
খসড়া থেকে সরাসরি নেওয়া:
struct C {
virtual void f() = 0 { }; // ill-formed
};