صدا زدن مخرب کلاس - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

صدا زدن مخرب کلاس

+1 امتیاز
سلام

میشه در ++c کاری کرد که هر وقت خواستیم مخرب یک کلاس صدا زده بشه؟یعنی مثلا در وسط کار یک تابع از کلاس A مخربش رو فراخوانی کنیم؟

و اینکه کلا در چه مواقعی مخرب کلاس صدا زده میشه؟زمانی که کار توابع کلاس تمام میشه و از کلاس بیرون میریم؟
سوال شده اردیبهشت 18, 1393  بوسیله ی moh3en (امتیاز 209)   15 28 40

1 پاسخ

+3 امتیاز

destructor کلاس هم مثل بقیه توابع هستش با این تفاوت که زمان پاک شدن شی کلاس صدا زده میشه 

این اتفاق هم وقتایی میفته که کلاس delete بشه یا از scope خارج بشین مثلا 

#include <iostream>
using namespace std;
class A
{
public:
    ~A(){cout<<"in destructor\n";}
    void foo(){cout<<1;}
};

void f()
{
    A a;
    A *b=new A;
    delete b;//call b destructor
}// out of a scope call a destructor

int main()
{
    f();
    A a;
    a.~A();//call destructor
    a.foo();//oops undefined behavior
}//call a destructor

 

از اون جایی که مخرب کلاس خودش یک تابع هستش صدا زدنش مشکلی نداره ولی باعث نمیشه حافظه گرفته شده بوسیله کلاس پاک بشه فقط کاری که می کنه اینه که به برنامه می گه اون مقدار رمی که اشغال شده مربوط به کلاس نیست !

و این که صدا زدن توابع کلاس بعد از صدا زدن سازنده میشکل داره یعتی مثلا توی کد بالا استفاده از a.foo باعث میشه برنامه درست کار نکنه و undefined behavior هستش . 

ضمنا صدا زدن destructor کلاس کاربرد زیادی نداره بهتره این کارو نکنین ! 

پاسخ داده شده اردیبهشت 18, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
...