Uchlik qoidasi (C ++ dasturlash) - Rule of three (C++ programming)

The uchta qoidalar va beshta qoidalar bor bosh barmoq qoidalari yilda C ++ binosi uchun istisno xavfsiz kodi va qoidalarni rasmiylashtirish uchun resurslarni boshqarish. Qoidalar a-ning sukut bo'yicha a'zolarini qanday belgilaydi sinf ushbu maqsadlarga muntazam ravishda erishish uchun foydalanilishi lozim.

Uch qoida

The uchta qoidalar (Katta Uchlik Qonuni yoki Katta Uchlik nomi bilan ham tanilgan) a bosh barmoq qoidasi yilda C ++ (gacha C ++ 11 ) deb da'vo qiladigan bo'lsa, agar a sinf belgilaydi quyidagilardan har qandayida, ehtimol u uchalasini aniq belgilashi kerak:[1]

Ushbu uchta funktsiya maxsus a'zo funktsiyalari. Agar ushbu funktsiyalardan biri dasturchi tomonidan e'lon qilinmasdan ishlatilsa, u kompilyator tomonidan quyidagi sukut bo'yicha semantika bilan bevosita amalga oshiriladi:

  • Yo'q qiluvchi - Ob'ektning barcha sinf a'zolari destruktorlarini chaqiring
  • Konstruktorni nusxalash - nusxa konstruktori argumentining mos keladigan a'zolaridan ob'ektning barcha a'zolarini tuzing, ob'ektning sinf tipidagi a'zolarning nusxa konstruktorlarini chaqiring va barcha sinfga tegishli bo'lmagan (masalan,) int yoki ko'rsatgich) ma'lumotlar a'zolari
  • Nusxa tayinlash operatori - Ob'ektning barcha a'zolarini tayinlash operatori argumentining mos keladigan a'zolaridan tayinlang, ob'ektning sinf tipidagi a'zolarning nusxasini tayinlash operatorlarini chaqiring va barcha sinfga tegishli bo'lmagan turdagi oddiy topshiriqni bajaring (masalan.). int yoki ko'rsatgich) ma'lumotlar a'zolari.

Uch qoida, agar ulardan birini dasturchi tomonidan belgilanishi kerak bo'lsa, demak kompilyator tomonidan yaratilgan versiya bitta holda sinf ehtiyojlariga mos kelmasligini anglatadi va u boshqa holatlarga ham to'g'ri kelmaydi deganidir. "Uchlik qoidasi" atamasi 1991 yilda Marshall Klayn tomonidan kiritilgan.[2]

Ushbu qoidaga tuzatish, agar sinf shunday tuzilgan bo'lsa Resurslarni sotib olish - bu ishga tushirish (RAII) uning barcha (noan'anaviy) a'zolari uchun ishlatiladi, destruktor noma'lum bo'lib qolishi mumkin (shuningdek, "Katta Ikkala qonun" deb nomlanadi)[3]). Ushbu yondashuvning tayyor namunasi - foydalanish aqlli ko'rsatgichlar oddiylarning o'rniga.[3]

Yashirin ravishda yaratilgan konstruktorlar va tayinlash operatorlari oddiygina barcha sinf a'zolarini nusxalashadi ("sayoz nusxa "),[4] belgilash kerak aniq nusxa ko'chirish konstruktorlari va nusxa tayinlash operatorlari murakkab ma'lumotlar tuzilmalarini qamrab oladigan yoki ko'rsatgichlar kabi tashqi ma'lumotlarga ega bo'lgan sinflar uchun, agar siz sinf a'zolari ko'rsatgan moslamalarni nusxalashingiz kerak bo'lsa. Agar standart xatti-harakatlar ("sayoz nusxa") aslida mo'ljallangan bo'lsa, unda aniq ta'rif, keraksiz bo'lsa ham, bo'ladi "o'z-o'zini hujjatlashtirish kodi "bu nazoratdan ko'ra niyat bo'lganligini ko'rsatmoqda. Zamonaviy C ++ da a sintaksis funktsiya tanasini yozmasdan standart funktsiya kerakli ekanligini aniq belgilash uchun.

Beshlik qoidasi

Kelishi bilan C ++ 11 uchta qoidalar kengaytirilishi mumkin beshta qoidalar (shuningdek, katta 5 qoidasi sifatida ham tanilgan[5]) kabi C ++ 11 asboblar semantikani ko'chirish,[6] maqsad ob'ektlarga ruxsat berish qatnashmoq (yoki o'g'irlash) vaqtinchalik ob'ektlardan olingan ma'lumotlar. Quyidagi misolda yangi harakatlanuvchi a'zolar ham ko'rsatilgan: move constructor va move operatori. Binobarin, uchun beshta qoidalar bizda quyidagilar mavjud maxsus a'zolar:

Vaziyatlar mavjud bo'lib, ular sinflarga destruktorlar kerak bo'lishi mumkin, ammo nusxa ko'chirish va ko'chirish konstruktorlarini va topshirish operatorlarini ko'chirish va ko'chirishga qodir emas. Bu, masalan, asosiy sinf ularni qo'llab-quvvatlamaganida sodir bo'ladi Katta to'rtlik a'zolari, ammo hosil bo'lgan sinfning konstruktori o'z foydalanishi uchun xotirani ajratadi.[iqtibos kerak ] C ++ 11-da, sukut bo'yicha beshta a'zoni aniq belgilash orqali buni soddalashtirish mumkin.[7]

Shuningdek qarang

Adabiyotlar

  1. ^ Stroustrup, Bjarne (2000). C ++ dasturlash tili (3 nashr). Addison-Uesli. pp.283 –4. ISBN  978-0-201-70073-2.
  2. ^ Koenig, Endryu; Barbara E. Moo (2001-06-01). "C ++ osonlashtirildi: uchta qoidalar". Doktor Dobbning jurnali. Olingan 2009-09-08.
  3. ^ a b Karlsson, Byorn; Uilson, Metyu (2004-10-01). "Katta ikkitaning qonuni". C ++ manbai. Artima. Olingan 2008-01-22.
  4. ^ C ++ dasturlash tili. p. 271.
  5. ^ "C ++ 11: Katta beshlikning qoidasi" (PDF). Olingan 4 iyun 2018.
  6. ^ Stroustrup, Bjarne (2013-04-07). "C ++ 11 - yangi ISO C ++ standarti". Olingan 2013-05-10.
  7. ^ "Uch / besh / nol qoidasi". cppreference.com. Olingan 15 fevral 2015.