auto_ptr | unique_ptr | shared_ptr | Умные указатели. Изучение С++ для начинающих. Урок

แชร์
ฝัง
  • เผยแพร่เมื่อ 15 พ.ย. 2024

ความคิดเห็น • 126

  • @SimpleCodeIT
    @SimpleCodeIT  6 ปีที่แล้ว +42

    *Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)*

  • @oluashua
    @oluashua 2 ปีที่แล้ว +53

    Моя карьера программиста началась с твоих роликов❤simple code forever in my heart

    • @Крайзис777
      @Крайзис777 ปีที่แล้ว +2

      Здорово, вы уже работайте в этой сфере! Тоже стремлюсь к этому же!

    • @BaielAsylbekov
      @BaielAsylbekov ปีที่แล้ว

      @@Крайзис777 как дела, все еще учишь?

    • @1mpalo362
      @1mpalo362 9 หลายเดือนก่อน

      и как успехи@@Крайзис777

  • @yugenepopov2014
    @yugenepopov2014 ปีที่แล้ว +3

    Сергей, я вас люблю! Очень подробно и понятно. Радует, что разбираете саму механику работы тех или иных методов/объектов/классов, а не просто говорите о их функционале!

  • @СтаніславДеркач-щ6и
    @СтаніславДеркач-щ6и 2 ปีที่แล้ว +27

    13:52
    Статическим полем нельзя реализовать такой указатель, так как в таком случае счётчик ссылок будет общий для всех указателей. Даже для тех, которые указывают на разные области памяти
    В остальном полезно и интересно. Спасибо

    • @Kirik516
      @Kirik516 2 ปีที่แล้ว +2

      Статический словарь (карта) и норм.

    • @rafk5341
      @rafk5341 2 หลายเดือนก่อน

      @@Kirik516 слишком дорого

  • @SimpleCodeIT
    @SimpleCodeIT  6 ปีที่แล้ว +14

    #auto_ptr #unique_ptr #shared_ptr #SimpleCode #урокипрограммирования

  • @kaynsolo
    @kaynsolo 6 ปีที่แล้ว +39

    Урок #131, полет нормальный! Летим дальше)

  • @Руслан_Пещеров
    @Руслан_Пещеров 3 ปีที่แล้ว +8

    Супер-урок. Всё чётко, ясно и понятно! Спасибо автору!

  • @nikitamarkov3212
    @nikitamarkov3212 ปีที่แล้ว +1

    ооооооооооооооооооочень хорошее объяснение, спасибо вам большое за ваши труды

  • @ИванКозловский-ш9н
    @ИванКозловский-ш9н ปีที่แล้ว

    привет из 2023. Спасибо большое за уроки!

  • @ruslandad365
    @ruslandad365 ปีที่แล้ว

    Потрясающий урок
    теперь преоткрывается завеса того как жа на самом деле работает сборщик мусора в более современных языках програмирования

  • @Семен-к6ж3п
    @Семен-к6ж3п 4 ปีที่แล้ว +4

    Спасибо за урок! я еще javascript знаю и теперь мне понятно как там сборщик именно под капотом работает!)( там как раз он удаляет только тогда объекты, когда на них никто не ссылается)

    • @ДмитрийНормов-ю6ц
      @ДмитрийНормов-ю6ц 2 ปีที่แล้ว

      "там как раз он удаляет только тогда объекты, когда на них никто не ссылается" - об этом говорится в любом туториале по JS.

  • @nikhunt5855
    @nikhunt5855 7 หลายเดือนก่อน

    Супер Интересно! И доступно!Спасибо!

  • @ЖеняМилев
    @ЖеняМилев 6 ปีที่แล้ว +70

    Хочется услышать всё-таки и про weak_ptr.

    • @white9433
      @white9433 3 ปีที่แล้ว +9

      хочется загугли

  • @nap0le0nb0naparte7
    @nap0le0nb0naparte7 6 ปีที่แล้ว +20

    Спасибо большое за урок Сергей!!! Shared_point рулит)))

  • @stepanradchenko6831
    @stepanradchenko6831 4 ปีที่แล้ว +7

    Спасибо, очень структурированное и полезное видео 😊

  • @IIIA_KO
    @IIIA_KO 2 ปีที่แล้ว +1

    Большое вам спасибо за уроки

  • @KurpatovInstagram
    @KurpatovInstagram 6 ปีที่แล้ว +6

    Спасибо!

  • @artlinestudio6735
    @artlinestudio6735 3 ปีที่แล้ว +3

    Очень полезный и интересный урок! Лайк от всей души! Спасибо!

  • @Ermine882
    @Ermine882 6 ปีที่แล้ว +6

    Спасибо за урок.

  • @blackgolddev4023
    @blackgolddev4023 4 ปีที่แล้ว +2

    Супер огонь))) Спасибо большое!

  • @aysmercer
    @aysmercer หลายเดือนก่อน +1

    Насчёт статичности COUNT, если так сделать, то будет ряд проблем, лучше делать его динамическим.
    1. Глобальность счетчика: Если использовать статическое поле, то это будет единый счетчик для всех shared_ptr, даже если они управляют разными объектами. Это значит, что когда вы уничтожите один shared_ptr, он уменьшит счетчик, но это может повлиять на удаление объектов, управляемых другими shared_ptr.
    2. Синхронизация доступа: Так как счетчик является общим для всех shared_ptr, возникает необходимость в синхронизации доступа к нему из разных потоков. Это усложняет реализацию и снижает производительность.

  • @БорисЦариков-ъ9п
    @БорисЦариков-ъ9п 6 ปีที่แล้ว +7

    Спасибо за уроки)

  • @NoGameNoLIfe-3R
    @NoGameNoLIfe-3R 6 ปีที่แล้ว +5

    Спасибо за этот труд!

  • @АлександрЯркин-й9я
    @АлександрЯркин-й9я 4 ปีที่แล้ว +1

    Спасибо большое!

  • @HugoBossKosta
    @HugoBossKosta 2 ปีที่แล้ว +4

    достаточно сложная тема, но объяснённая простым языком, так что спасибо!)

  • @postdisc0
    @postdisc0 ปีที่แล้ว

    я Вас просто обожаю

  • @vladalu9794
    @vladalu9794 6 ปีที่แล้ว +5

    Спасибо за урок Серега, про weak_ptr тоже интересно было бы послушать)))

  • @kabanenko5319
    @kabanenko5319 3 ปีที่แล้ว +2

    Очень полезный и крутой урок, спасибо большое!!!!!

  • @kolosrodoskyi
    @kolosrodoskyi 6 ปีที่แล้ว +6

    как всегда на уровне.

  • @kerril1309b
    @kerril1309b 5 ปีที่แล้ว +3

    Спасибо за качественный контент

  • @andrewbistroff1199
    @andrewbistroff1199 6 ปีที่แล้ว +4

    Спасибо за урок все просто и понятно!

  • @АндрейМиненко-ц3з
    @АндрейМиненко-ц3з 6 ปีที่แล้ว +6

    Очередное спасибо за урок

  • @pavelios3577
    @pavelios3577 5 ปีที่แล้ว +3

    Благодарю за урок!

  • @secretsecret1713
    @secretsecret1713 11 หลายเดือนก่อน +1

    СэрГей.... как я понял проблему решили также как и в при проектирований ОС, в коде ядра там тоже примитивы освобождаются когда счетчик ссылки на них становится 0

  • @PervinGabil_off
    @PervinGabil_off 3 หลายเดือนก่อน

    Вот только статическое поле бесполезно, ведь оно актуально для всех объектов класса.
    Ответ довольно очевиден, определено обычное поле count, которое по умолчанию равно 1. При каждом вызове конструктора по другому shared_ptr данный count инкрементируется.
    В свою очередь в деструкторе два сценария, в одном если count не равен 1 он декрементируется, в другом - производит очистку памяти.

  • @mykhailomorhal2181
    @mykhailomorhal2181 6 ปีที่แล้ว +2

    Спасибо)

  • @СарматПересветов
    @СарматПересветов 3 ปีที่แล้ว +3

    есть очень актуальный вопрос по теме. если обьекты класса shared_ptr будут ссылаться не на одну область в памяти, а на разные, к примеру на разные динамические массивы, то каким тогда образом будет происходить очистка памяти, ведь статическое поле класса shared_ptr (с помошью которого идет подсчет созданных обьектов этого класса) будет общим для всех обьектов этого класса вне зависимости от того на какую область в памяти они указывают?

    • @ДмитрийНормов-ю6ц
      @ДмитрийНормов-ю6ц 2 ปีที่แล้ว

      а shared_ptr используется, если у тебя несколько указ. на 1 память, т.е. в твоем случае они не нужны.

    • @vladimir_v_it
      @vladimir_v_it 6 หลายเดือนก่อน

      Подмечено верно. Там указатель на контрольный блок. А не статическая переменная.

  • @Fateslav
    @Fateslav 6 ปีที่แล้ว +1

    Хочется подробнее про кастомные deleter для умных указателей

  • @zakharkulbachenko3433
    @zakharkulbachenko3433 3 ปีที่แล้ว

    Супер

  • @SeshAlex
    @SeshAlex 6 ปีที่แล้ว +5

    Спасибо за урок! Не понимаю почему, но указатели, ссылки и все что с ними связанно являются для меня самой сложной темой, камнем преткновения так сказать. По не сколько раз просматривал ваши уроки на эту тему и все равно не доходит как и где их использовать. Практических заданий бы. Но гугл в своем репертуаре, задания есть но они для прогерров со стажем, а для лузера увы нет. Но вам благодарность однозначно, вы стараетесь, при чем бесплатно. Лайк.

  • @bulba1995
    @bulba1995 2 ปีที่แล้ว

    Отличный урок спасибо .

  • @IT_Enthusiast
    @IT_Enthusiast 6 ปีที่แล้ว +7

    Дякую!

  • @ЯрославГоловко-ф6и
    @ЯрославГоловко-ф6и 4 ปีที่แล้ว

    спасибо

  • @СарматПересветов
    @СарматПересветов 3 ปีที่แล้ว +1

    и второй вопрос, почему бы просто не реализовать в умных указателях конструктор копирования по типу который мы использовали для реализации собственного класса string, который при копировании создает указатель на новую область в памяти с точно такими же данными какие были в старом указателе?

    • @dimr5001
      @dimr5001 2 ปีที่แล้ว

      ну как минимум это не рациональное использование памяти. Ну и как бы теряется весь смысл указателей. Тобиш работа со предельными данными из разных мест кода а не их копией.

  • @lavshyak9640
    @lavshyak9640 ปีที่แล้ว

    а этот ваш шаредптр потокобезопасный? если одновременно вызовутся деконструкторы у 2х последних обьектов, то беды же начаться должны

  • @avgustin5314
    @avgustin5314 ปีที่แล้ว +1

    Убрали умные указатели?
    Выдает ошыбку unique_ptr или shared не являюца членами std, а если не использую std::unique_ptr а просто unique_ptr то пишет что он не для етой цели декларирован, прочитал кучу документацый, в том числе microsoft везде одно и тоже и ничего не роботает.

  • @flexterion
    @flexterion ปีที่แล้ว

    Прикольно. Ни разу не пользовался

  • @avengeranubis
    @avengeranubis 2 ปีที่แล้ว +1

    автопоинтер уже был устаревшим в 2018 году. А сейчас он, похоже, умер от старости, ибо в библиотеке memory нет никакого auto_ptr (или vs его не видит)

  • @borovanyavanyabor3822
    @borovanyavanyabor3822 ปีที่แล้ว

    На сколько я понял, указатели перечисленные в этом видео, автоматически уничтожаются при выходе из зоны видимости программы и не вызывают утечек памяти?

  • @0518-r4h
    @0518-r4h 3 ปีที่แล้ว

    3:52 popit-ка

  • @voland3427
    @voland3427 6 ปีที่แล้ว +8

    Здраствуйте, я хотел спросить, а когда вы закончите курс "C++ для начинающих", то вы скажите что дальше учить и в какой области развиваться ?

    • @BobTheBuilder_2334
      @BobTheBuilder_2334 6 ปีที่แล้ว

      в тему этого вопроса хотел так же спросить, на сколько еще уроков рассчитан этот курс? (извиняюсь заранее, если это уже где то обсуждалось)

    • @SimpleCodeIT
      @SimpleCodeIT  6 ปีที่แล้ว +3

      О планах на будущее я рассказывал недавно в последних ответах на вопросы th-cam.com/video/EQdq3XxoJQQ/w-d-xo.html

    • @СправаФея
      @СправаФея 6 ปีที่แล้ว +9

      это видео не доступно для просмотра, там отображается серый восклицательный знак в кружочке,

  • @user_x138
    @user_x138 3 ปีที่แล้ว

    Сергей, по твоему примеру решил создать аналог Shared_ptr с использованием статической переменной. Подскажи, почему я не могу задать ее значение? Вот так не работает int SmartPointer::count = 0;

    • @user_x138
      @user_x138 3 ปีที่แล้ว

      получилось только так: int SmartPointer::count = 0; Но что делать если мне потребуется другой тип данных, а определить count надо сразу(например, этот класс будет в библиотеке), а вот так не получается int SmartPointer::count = 0;

    • @user_x138
      @user_x138 3 ปีที่แล้ว +1

      Получилось как-то так
      template class SmartPointer {
      T* ptr;
      public:
      static int count;
      SmartPointer(T *ptr) {
      this->ptr = ptr;
      count++;
      cout

  • @Куся-ч9я
    @Куся-ч9я 3 ปีที่แล้ว

    Спасибо за урок! У меня такой вопрос. Я попытался самостоятельно реализовать конструктор копирования для нашего прошлого класса умного указателя SmartPointer, но компилятор даже не обращает на него внимания, а просто присваивает указателю ссылку на первый. Что не так? В уроке #82 такой проблемы не было.

    • @Куся-ч9я
      @Куся-ч9я 3 ปีที่แล้ว

      Связано ли это как-то именно с работой указателей или шаблонными классами?

    • @ОлегКомков-ш1м
      @ОлегКомков-ш1м 2 ปีที่แล้ว

      Я подразумеваю, что объект копируется полностью, с учётом того, на что они ссылаются. Вот и получается, что при копировании указателей, на одну и ту же область памяти будут ссылаться два указателя. Область памяти при этом не меняется, данные тоже, только растёт количество указателей, указывающих на это. По-моему, это похоже на правду

  • @xamidillomamathanov3396
    @xamidillomamathanov3396 6 ปีที่แล้ว +10

    *ADDUSHI BRATUHA*

  • @ТимерланБатаев
    @ТимерланБатаев 2 ปีที่แล้ว

    Подскажите пожалуйста, а смысл тогда использовать auto_ptr?

    • @romankuznetsov4601
      @romankuznetsov4601 2 ปีที่แล้ว +2

      auto_ptr был исключен из стандарта при выпуске C++17. Просто забудьте про него

  • @yugenepopov2014
    @yugenepopov2014 ปีที่แล้ว

    У меня у одного компилятор не видит auto_pointer?
    Выдает ошибку: identifier "auto_ptr" is undefined.

    • @lopiq1737
      @lopiq1737 8 หลายเดือนก่อน +1

      С с++17 убрали полностью auto_ptr

  • @shoorikefimov6759
    @shoorikefimov6759 4 ปีที่แล้ว +4

    Это, я так понимаю, не просто static counter, а дин. массив static counter для каждого адреса в дин. памяти на которую указывает указатель. Причем, каждый из элементов массива static counter знает, указатели на какой адрес в памяти он считает. То есть 2 дин. массива: static counter и static address.

    • @seregasemenov8412
      @seregasemenov8412 3 ปีที่แล้ว

      Не правильно понимаешь. Почитать про статические переменные. И про шаблоны классов.

    • @паносниглайдер
      @паносниглайдер 3 ปีที่แล้ว

      @@seregasemenov8412 Причём статические переменные и шаблоны класса к массивам?)

    • @seregasemenov8412
      @seregasemenov8412 3 ปีที่แล้ว

      Сейчас ночь, а завтра я про это вероятнее всего забуду поэтому отвечу сейчас. Возможны неточности.
      Нет в реализации умных указателей статических масивов. Они там не нужны. Каждый указатель хранит адрес и количество. см. memory

    • @паносниглайдер
      @паносниглайдер 3 ปีที่แล้ว

      @@seregasemenov8412 Я знаю, каждый shared_ptr хранит два указателя, один на объект, второй на control_block, в котором хранятся счётчики ссылок для shared и weak_ptr, а так же некоторые другие поля

  • @fgfhgfhfdfdfgfdg115
    @fgfhgfhfdfdfgfdg115 6 ปีที่แล้ว +3

    Cколько уроков будет ?

    • @ДмитрийКошелев-п5э
      @ДмитрийКошелев-п5э 4 ปีที่แล้ว +3

      Привет, я из будущего и говорю их около 200

    • @Matissed
      @Matissed 3 ปีที่แล้ว

      @@ДмитрийКошелев-п5э как успехи?

  • @desidemeokla
    @desidemeokla หลายเดือนก่อน

    никогда не пойму значение указателей. Я понимаю, что они указывают на область памяти, где есть объект, но зачем это?

  • @trxxnk_0.924
    @trxxnk_0.924 ปีที่แล้ว

    а почему просто в деструкторе не провять ptr == nullptr?

    • @sleepyNovember_project
      @sleepyNovember_project 5 หลายเดือนก่อน

      так это будет бессмысленно в данной ситуации

  • @Kusokbanana15
    @Kusokbanana15 2 ปีที่แล้ว

    Что бы я без тебя делал?

  • @andreykovalev5326
    @andreykovalev5326 6 ปีที่แล้ว +3

    Кто-нибудь может подсказать
    В каком уроке он рассказывал про защиту от дурака ?

  • @ИльяСорокин-г7г
    @ИльяСорокин-г7г 4 ปีที่แล้ว

    такой вопрос почему не используете make_shared() ?

    • @ДмитрийНормов-ю6ц
      @ДмитрийНормов-ю6ц 2 ปีที่แล้ว

      ты думаешь, что в одном уроке можно всю STL рассказать?

    • @romankuznetsov4601
      @romankuznetsov4601 2 ปีที่แล้ว

      @@ДмитрийНормов-ю6ц было бы неплохо, да =)

  • @pubgr862
    @pubgr862 5 ปีที่แล้ว +1

    А как можно проверить ссылку на принадлежность к каким либо указателям? Или такой реализации нет?

  • @usovmisha
    @usovmisha 6 ปีที่แล้ว

    Можно такой вопрос,когда мы пишем оператор перемещения для объекта, мы должны использовать reset или release для того, чтобы не вызывался деструктор два раза, но при этом объект правильно переместился?

  • @Km-pn3hf
    @Km-pn3hf 5 ปีที่แล้ว +1

    weak pointer бы:(

    • @crackall1946
      @crackall1946 4 ปีที่แล้ว

      Не подскажешь где просто объяснят что это?)

  • @4etvero4ka90
    @4etvero4ka90 3 ปีที่แล้ว

    if (var != nullptr)
    delete var;

    • @decker08
      @decker08 3 ปีที่แล้ว +1

      Это оверхед, delete nullptr не вызывает падения.

  • @tirozin
    @tirozin ปีที่แล้ว

    с C++17 auto_ptr убрали из стандарта.

  • @Suren919
    @Suren919 4 ปีที่แล้ว +1

    weak_ptr please!!!!!

  • @vladimir_woland
    @vladimir_woland 4 ปีที่แล้ว

    Ничего не понятно - а если там будут другие объекты того же класса shared_pnt, под которые выделены разные области памяти? Получается класс будет считать все такие объекты а одном общем поле статик. Как он тогда поймёт, какие ссылки к каким областям памяти относятся? Надеюсь, поясните.

    • @ВалерийПопов-ф2м
      @ВалерийПопов-ф2м 4 ปีที่แล้ว +1

      Наверное поздно, ну да ладно. Смотри я думаю там в классе есть static динамический двумерный массив. Первый так сказать ряд - это адрес или что-то типо того, второй - это кол-во указателей. Тогда возникает вопрос, а как деструктор понимает, что уничтожает? Вариантов много, самый простой - при создании объекта класса в переменную присваивается адрес, на который ссылается указатель, потом в деструкторе сравнивается с первым рядом массива, заходит в подходящий массив и уменьшает count, конечно можно и без двумерного массива, но так как по мне понятней

    • @vladimir_woland
      @vladimir_woland 4 ปีที่แล้ว

      @@ВалерийПопов-ф2м так понятно, но просто в видео это было скомкано. вообще ничего такого не говорилось.

    • @ВалерийПопов-ф2м
      @ВалерийПопов-ф2м 4 ปีที่แล้ว

      Это по типу додумайте сами, но с более-менее хорошими знаниями ООП, если не вдаваться в подробности излишние, то всё ясно и понятно. Если мне что-то не понятно, я пытаюсь это сам реализовать, так сказать прочувствовать на своей шкуре, помогает

    • @паносниглайдер
      @паносниглайдер 3 ปีที่แล้ว +1

      ​@@ВалерийПопов-ф2м, в shared_ptr есть два указателя, один на объект, второй на класс control_block. control_block хранит счётчик ссылок(сколько shared_ptr указывают на данный объект) и ещё некоторые поля, как только у последнего shared_ptr вызывается деструктор, то он уничтожает объект. Более хорошее объяснение в книге "Эффективный и современный С++".

  • @archi6200
    @archi6200 6 ปีที่แล้ว

    кто вообще диз поставил?

    • @СправаФея
      @СправаФея 6 ปีที่แล้ว +10

      я так понимаю, здесь дизы ставит Гоша Дударь. потому как, больше некому,))

    • @A_D_E_P_T_U_S
      @A_D_E_P_T_U_S 6 ปีที่แล้ว

      как с языка снял)

    • @user-ye4uq5sc1j
      @user-ye4uq5sc1j 6 ปีที่แล้ว

      Константин Яровой если так интересно, то я поставил, за хреновый пересказ стандарта

    • @feewre
      @feewre 6 ปีที่แล้ว +2

      ​@@user-ye4uq5sc1j Ну давай, расскажи мне в каком это месте он хреновый, и как по твоему должен выглядеть не хреновый пересказ стандарта, учитывая что ролик называется "Изучение С++ для начинающих", а не "пересказ стандарта"

    • @user-ye4uq5sc1j
      @user-ye4uq5sc1j 6 ปีที่แล้ว

      @@feewre вот именно, изучение не должно сводиться к пересказу стандарта, а хреновый он тем, что пару рах автор сказал о том, что в стандарте явно запрещено! Попытайтесь разобраться перед тем, как наезжать на меня

  • @melixetyannk
    @melixetyannk ปีที่แล้ว

    Спасибо огромное!

  • @DmitryDolganov
    @DmitryDolganov 5 ปีที่แล้ว +3

    Спасибо!

  • @RomanGadiev
    @RomanGadiev 4 ปีที่แล้ว

    Спасибо за урок!

  • @tyomka4265
    @tyomka4265 6 ปีที่แล้ว +5

    Спасибо за урок.

  • @DD0S2
    @DD0S2 3 ปีที่แล้ว +1

    спасибо

  • @miroslavklyukovsky683
    @miroslavklyukovsky683 2 ปีที่แล้ว +1

    Спасибо!

  • @one1axis
    @one1axis 3 ปีที่แล้ว

    Спасибо за урок!

  • @ВітяКоміссаров
    @ВітяКоміссаров 2 ปีที่แล้ว

    спасибо

  • @Antonov_Ivan.
    @Antonov_Ivan. 10 หลายเดือนก่อน

    Спасибо за урок!