Avatar ·

متى يجب استخدام المدمرات الافتراضية في C++؟

مرحباً بالجميع! أنا مطور C++ مبتدئ، ويقلقني سؤال واحد. بدأت للتو في فهم تعدد الأشكال والوراثة، وواجهت هذا الموقف. لنفترض أن لدي فئة أساسية `Animal` وفئة مشتقة `Dog`. أريد استخدام المؤشرات الذكية (shared_ptr) لإدارة الذاكرة تلقائياً. الكود يبدو هكذا: ```cpp #include #include class Animal { public: Animal() { std::cout << "Animal created\n"; } ~Animal() { std::cout << "Animal destroyed\n"; } virtual void speak() { std::cout << "Animal sound\n"; } }; class Dog : public Animal { public: Dog() { std::cout << "Dog created\n"; } ~Dog() { std::cout << "Dog destroyed\n"; } void speak() override { std::cout << "Woof!\n"; } }; int main() { std::shared_ptr pet = std::make_shared(); pet->speak(); // يطبع "Woof!" // pet يخرج عن النطاق... } ``` عندما ينتهي البرنامج، أرى في وحدة التحكم