Деструктор

Од Википедија, слободната енциклопедија
Прејди на: содржини, барај

Во објектното програмирање, деструктор е метод кој автоматски повикан кога објект е уништен. Негова главна намена е да ги исчисти и ослободи ресурсите кои се заземени од објектот за време на животниот циклус и да го ослободи од другите објекти или ресурсите уништувајќи ја секоја референца во процесот. Употребата на деструкторите е клучот за концептот Добивање На Ресурси Е Иницијализација.

Во јазик со механизам за автоматско собирање на “ѓубрето”, невозможно е детерминистичко осигурување на повикувањето на деструкторот, и тоа значи дека овие јазици се непогодни за RAII. Во такви јазици, неповрзувањето на објект од постоечките ресурси мора да биде направено од јасен повик од соодветна функција (наjчесто наречена Dispose() ). Овој метод е исто така препорачлив за ослободување ресурси.

Виртуелен деструктор[уреди]

Виртуелен деструктор е деструктор кој може да биде отчитан од подкласи. Во C++, употребата на виртуелни деструктори во наследувачките хиреархии го олеснува сопственото чистење на објектите, спречувајќи недостатоци на ресурсите и зафатеноста на хип (heap) меморијата.

Примери[уреди]

C++

Во C++, функцијата деструктор има исто име како и класата, но со знакот ~ (тилда) пред неа. Ако објектот бил создаден како автоматска променлива, нејзиниот деструктор е автоматски повикан кога тоа оди надвор од подрачјето. Ако објектот е создаден со резервираниот збор new, тогаш неговиот деструктор се повикува кога покажувачот што покажува на објектот е избришан.

Оваа посебна класа содржи a_pointer, покажувач кој покажува на карактерите од string. Деструкторот е потребен кога динамички креирани податоци се употербувани, отворани се податотеки, “брава” е потребно да се отклучи или копија на конструктор била употребувана.

#include <string>
using namespace std;
 
class myclass {
  public:
    string* [] a_pointer;
    private: int current;
 
    void newstring(void)
    {
        a_pointer[current++] = new string();
    }
 
    ~myclass()      // THIS IS THE DESTRUCTOR METHOD
    {
        int n = 0;
        while (n <= current)
            delete a_pointer[n++];    
    }
};

REALbasic[уреди]

Деструкторите во REALbasic можат да бидат во една од двете форми. Секоја форма користи точна (регуларна) метод декларација со специјално име (без параметри и без излезна величина). Постарите форми го користат истото име како и класата со знакот ~(тилда) како префикс. Поновите форми го користат името деструктор. Новите форми се преферираат, бидејќи го прават рефакторирањето на класата полесно.

Class Foobar
  // Old form
  Sub ~Foobar()
  End Sub
 
  // New form
  Sub Destructor()
  End Sub
End Class