C++ за 21 день седьмое издание



Download 1,38 Mb.
bet397/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   393   394   395   396   397   398   399   400   ...   437
Bog'liq
word1

О: template



  1. class deepcopy_smart_pointer



2 : {

  1. private:




  1. T* mjpObject;




  1. public:




  1. // ... другие функции



7:


8: // конструктор копий указателя глубокого копирования



19 Зак. 3626

578 ЗАНЯТИЕ 26. Понятие интеллектуальных указателей



  1. deepcopy_smart_pointer (const deepcopy_smart_pointer& source)



10: {

  1. // Clone() виртуальная: гарантирует глубокое копирование




    1. объекта производного класса




  1. m_pObject = source->Clone ();




  1. }



14:



  1. // Оператор присвоения копии




  1. deepcopy_smart_pointer& operator= (const deepcopy_smart_pointer& source)

  2. {




  1. if (m_pObject)




  1. delete m_pObject;

2 0 :

  1. m_pObject = source->Clone ();




  1. }

23:


24: };


Анализ

Как можно заметить, класс d e e p c o p y _ s m a r t _ p o in t e r реализует конструктор копий





  1. строках 9-13. Он обеспечивает глубокое копирование полиморфного объекта при по­ мощи функции C lo n e ( ) , которую должен реализовать объект. Точно так же он реализует оператор присвоения копии в строках 16-22. Для простоты в этом примере подразумева­ ется, что виртуальная функция C lo n e () реализована базовым классом F is h . Как правило, интеллектуальные указатели, реализующие модель глубокого копирования, получают эту функцию либо как параметр шаблона, либо как объект функции.

Таким образом, когда сам интеллектуальный указатель передается как указатель на базовый класс F is h , часть C a r p не отсекается:




deepcopy_smart_ptr freshWaterFish(new Carp); MakeFishSwim (freshWaterFish); // Carp не будет 'отсечен'
Глубокое копирование, реализованное в конструкторе интеллектуального указателя, обеспечивает передачу объекта без отсечения, даже при том, что синтаксически функции M a k e F is h S w im () требуется только его базовая часть.

Недостаток механизма глубокого копирования в низкой производительности. Для не­ которых приложений это не проблема, но во многих других случаях потеря производи­ тельности могла бы воспрепятствовать программисту задействовать интеллектуальный указатель в его приложении. Вместо этого он мог бы просто передать такой функции, как M a k e F is h S w im ( ), указатель базового класса (обычный указатель F is h * ) . Другие ссылоч­ ные типы пытаются решать эту проблему производительности иными способами.




Механизм копирования при записи


Копирование при записи (Copy on W rite — COW ) — одна из попыток оптимизиро­ вать производительность интеллектуальных указателей глубокого копирования за счет совместного использовании указателей до первой попытки записи объекта. При первой

Типы интеллектуальных указателей

579

попытке вызова не константной функции указатель COW, как правило, создает копию объ­ екта, для которого вызвана непостоянная функция, тогда как другие экземпляры указателя продолжат совместно использовать исходный объект.


Указатели COW широко распространены и имеют множество приверженцев. Поклон­ ники указателей COW полагают реализацию операторов (*) и (-> ) в их константных и не константных версиях ключевой функциональной возможностью указателя COW. Копию создает последняя.


Дело в том, что, выбирая реализацию указателя в соответствии с философией COW, следует убедиться в понимании подробностей его реализации, прежде чем перейти к его использованию. В противном случае вы можете оказаться в ситуации, где копий будет или слишком мало, или слишком много.





Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   393   394   395   396   397   398   399   400   ...   437




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish