friend түрінде жариялану қол жеткізу спецификаторы болып
табылмайды жəне мұраланбайды.
ЕСКЕРТУ Қандай функциялар мен кластардың достас немесе достас емес екенін класс өзі
анықтайтынына назар аударыңыз.
Деструкторлар Деструктор – бұл объектіге жұмсалып тұрған жады аймағын босату үшін
қолданылатын əдістің ерекше түрі. Объект көріну аймағынан шыққан кезде
деструктор автоматты түрде шақырылады:
□ жергілікті объектілер үшін – олар жарияланған блоктан шығу кезінде;
□ ауқымды объектілер үшін –
main функциясынан шығу процедурасының
бір бөлігі ретінде;
□ нұсқауыштар арқылы берілген объектілер үшін деструктор
delete операциясын колдану кезінде тікелей емес түрде шақырылады.
НАЗАР АУДАРЫҢЫЗ Объектіге нұсқауыштың əрекет ету аймағынан шығу кезінде деструкторды автоматты
түрде шақыру жүзеге асырылмайды.
Деструктордың атауы тильда белгісінен (~) басталады, одан кейін класс
аты жазылады. Деструктордың қасиеттері:
□ аргументтері жəне қайтарылатын мəні болмайды;
□
const немесе
static ретінде жариялануы мүмкін емес;
□ мұраланбайды;
□ виртуалды болуы мүмкін («Виртуалды əдістер» бөлімін қараңыз 221 б.).
Егер деструктор айқын түрде анықталмаған болса, компилятор автоматты
түрде бос деструктор кұрады.
Объект құрамында динамикалық түрде бөлінетін жадыға нұсқауыштар
бар болса, класта деструкторды тікелей айқын түрде сипаттау қажет, əйтпесе
объектіні жою кезінде оның өріс-нұсқауыштары сілтеме жасаған жады бос
аймақ ретінде белгіленбейді. Деструкторға нұсқауыш анықтау мүмкін емес.
Бұрыннан қарастырылып келе жатқан мысал үшін деструктор (204 б.)
төмендегідей түрде болуы тиіс:
monstr::~monstr() {delete [] name;}
205
Деструктордың толық нақтыланған атын көрсету арқылы оны тікелей
түрде шақыруға болады, мысалы: