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


Fish() {cout « "Fish: Constructed!" « endl;}



Download 1,38 Mb.
bet402/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   398   399   400   401   402   403   404   405   ...   437
Bog'liq
word1

Fish() {cout « "Fish: Constructed!" « endl;}







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

583

8

~Fish() {cout «

"Fish: Destructed!" «

endl;}




9

void Swim() const

{cout « "Fish swims

in water" « endl;}




10




  • };


  • void MakeFishSwim(const unique_ptr& inFish)




    1. {




    1. inFish->Swim();




    1. }



    17


    18 int main()
    19 {
    20 unique_ptr smartFish (new Fish);
    21

    1. smartFish->Swim();




    1. MakeFishSwim(smartFish); // OK, поскольку MakeFishSwim




      1. допускает ссылку



    24



    1. unique_ptr copySmartFish;




    1. // copySmartFish = smartFish; // Ошибка: operator= закрытый








    1. return 0;




    1. }



    Результат


    Fish: Constructed!


    Fish swims in water


    Fish swims in water


    Fish: Destructed!


    Анализ

    Как видно в выводе, конструкторы и деструкторы выполняю тся последовательно. Обратите внимание: даже при том, что объект, на который указывает указатель s m a r t ­ F is h , был создан в функции m ain (), как и ожидалось, он был освобожден (автоматиче­ ски) даже без явного вызова оператора d e l e t e . Таково поведение класса u n iq u e _ p tr , где выходящий из области видимости указатель освобождает свой объект при помощи деструктора. Обратите внимание, как в строке 23 можно передать указатель s m a r tF is h





    1. качестве аргумента функции M akeF ishS w im (). Это не этап копирования, поскольку функция M akeFishSw im () получает параметр по ссылке, как показано в строке 13. Если вы удалите символ ссылки &из строки 13, то немедленно получите ошибку компиляции, поскольку конструктор копий закрытый. Аналогично присвоение одного объекта класса u n iq u e _ p tr другому, как показано в строке 26, также не разрешается благодаря закрыто­ му оператору присвоения копии.

    Таким образом, указатель класса u n iq u e _ p tr безопасней, чем указатель класса a u to _ p t r (который ныне не рекомендован), поскольку он не объявляет недопустимым исходный объект интеллектуального указателя во время копирования или присвоения. Но он все же обеспечивает простое управление памятью, освобождая объект во время деструкции.


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





    Download 1,38 Mb.

    Do'stlaringiz bilan baham:
  • 1   ...   398   399   400   401   402   403   404   405   ...   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