متى يجب استخدام المدمرات الافتراضية في 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 يخرج عن النطاق...
}
```
عندما ينتهي البرنامج، أرى في وحدة التحكم