+
,
+=
жəне
++
операцияла-
рын да асыра жүктеген жөн (компилятор оны автоматты түрде орындамайды).
Мұндайда операциялар семантикасы олардың өзіне ұқсас стандартты опера-
ция семантикаларымен бірдей болуы тиіс.
Кез келген кластың негізі оның конструкторлары мен деструкторлары
болып табылады. Нақты берілген конструкторлар, көшірме конструкторы
жəне меншіктеу операциясы болмаған кездерде оларды компилятор автомат-
ты түрде құрады.
Келісім бойынша құрылатын көшірме конструкторы да, меншіктеу опе-
рациясы да бастапқы аймақтан қабылдаушы аймаққа элементтер бойынша
көшіруді орындайды. Егер объект құрамында нұсқауыштар бар болса, онда
көшіруден кейін əртүрлі екі объектінің сəйкес нұсқауыштары бір ғана жады
аймағына сілтеме жасайды. Объектілердің біріншісін жойған жағдайда бұл
жады аймағы бостылады, ал екінші объектіні жою кезінде сол жады аймағын
қайталап босатуға талпыну программаның анықталмаған əрекеттер орындау-
ына алып келеді Сондықтан, өріс-нұсқауыштары бар кластар үшін объектінің
динамикалық өрістері үшін жадыны бөлетін көшірме конструкторын жəне
меншіктеу операциясын əрқашанда нақты түрде тікелей анықтап алған дұрыс.
Сонымен қатар, объект конструкторында бөлінген динамикалық жады
оның деструкторында босатылуы тиіс. Бұл талаптың орындалмауы жадының
көбірек жұмсалуына əкеліп соғады. Нөлдік нұсқауышты жою қауіпсіз болып
саналады (мұндайда ешқандай əрекет орындалмайды), сондықтан егер кон-
структорлар, көшіру конструкторлары жəне меншіктеу операциялары дұрыс
жазылған болса, онда кез келген нұсқауыш бөлінген жады аймағына сілтеме
жасайды немесе ол нөлге тең болады да, оған тексерусіз
delete
операциясын
қолдануға болады.
Көшірме конструторы жəне меншіктеу операциясы арасындағы
айырмашылық – соңғысы қабылдаушы объект бар болған жағдайда да жұмыс
істейді, сондықтан мұнда динамикалық жадыны бөлудің алдында бұрын
262
қолданысқа берілген аймақты босату керек. Осының салдарынан, өріс-
нұсқауыштары бар кластар үшін меншіктеу операциясын жүзеге асыру кезінде
өзіндік меншіктеуге тексеру жүргізу керек жəне мұндайда объектіні өзгеріссіз
қалдыру қажет. Сонымен қатар, меншіктеу операциясы тұрақтыға сілтеме
қайтару керектігін есте сақтаған жөн. Сонымен, меншіктеу операциясының
анықтамасы келесі түрде болуы тиіс:
Достарыңызбен бөлісу: |