Back to Basics: C++ Smart Pointers - David Olsen - CppCon 2022

Поделиться
HTML-код
  • Опубликовано: 23 ноя 2024

Комментарии • 51

  • @coolwinder
    @coolwinder Год назад +17

    This talk is too good, incredible information presented. I have used this talk to sprawl my research and understanding of mentioned topics. Thanks David, this is much appreciated!

  • @violetashopova3586
    @violetashopova3586 6 месяцев назад +1

    THIS GUY! ... every talk he did i watched so far is worth its time in gold

  • @Bolpat
    @Bolpat 2 года назад +8

    I’m currently in the process of updating a pre-C++11 codebase and some rules I imposed to myself is:
    * Never assert(ptr_parameter); If you find yourself doing this to a parameter, it should be a reference. If necessary, the caller must assert.
    * never new and delete (“// transfers ownership” doesn’t cut it)
    * For arrays, use container types (e.g. std::vector, std::array) and (custom type) ranges and iterators
    Then, any T* is a nullable non-owner pointer to a single object. Exceptions apply when calling library functions I have no control over, but if _my_ function takes/returns a int* it expects/returns a nullable non-owner pointer to a single object.

    • @NoSpeechForTheDumb
      @NoSpeechForTheDumb 2 месяца назад

      @@Bolpat use static_assert instead of assert if possible. Unnecessary runtime hit by RTTI.

  • @vtx_lq
    @vtx_lq 2 года назад +13

    Excellent talk, thank you! Appreciate always revisiting some fundamentals.

  • @Roibarkan
    @Roibarkan 2 года назад +8

    48:20 the type-erased nature of shared_ptr deleters can sometimes relieve issues related to multiple heap situations, ensuring an object gets deleted from the heap it was allocated from

    • @coolwinder
      @coolwinder Год назад

      What is type-erased, also mentioned in 42:30, where it was mentioned as a resone for unique_ptr having deleter as template parameter and share_ptr a constructor argument for an instance of deleter? Thanks in advance :)

  • @Bolpat
    @Bolpat 2 года назад +5

    6:32 I’d add that a raw pointer should be nullable. If it’s non-owning and points to a single object, if it’s also not supposed to be null, what’s the difference to a reference?

  • @aprasath1
    @aprasath1 5 месяцев назад

    Wonderful video!!! Very well explained covering lots of issues with usage as well.

  • @acur665
    @acur665 10 месяцев назад

    Great talk - thank you for the fundamentals here!

  • @Roibarkan
    @Roibarkan 2 года назад +3

    14:02, 29:17 (slightly advanced) note that self-move (e.g. “a=std::move(a);”) is not considered something that move-assignment should guard against. Copy-assignment should typically guard against self-assignment, and this is guaranteed for shared_ptr.

    • @coolwinder
      @coolwinder Год назад

      Is this some guideline? Thanks

    • @anon1963
      @anon1963 Год назад

      @@coolwinder yeah since when you move an object, you set the pointer of the other object to nullptr. when you self move you set your object's pointer to nullptr. memory leak.

  • @dkutagulla
    @dkutagulla Год назад +2

    Excellent talk ! Learnt a lot.

  • @flocela
    @flocela Год назад +2

    at 33:38 on line 2. "a" gets passed into the thread function's parameter "b". Wouldn't that increment count. There's no red arrow showing increment count on line 2. A bit hazy on this, if anyone would answer, that would be great!

    • @zhongxina9569
      @zhongxina9569 Год назад

      I got the same question haha

    • @bva0
      @bva0 11 месяцев назад

      I think the compiler optimizes that away (assuming you don't compile with -O0) in this case.

    • @David_Olsen
      @David_Olsen 9 месяцев назад +2

      You are right. I missed the increment when the child thread's 'b' is initialized from the main thread's 'a'. I should have noticed that the number of increments and decrements didn't match. The main point of that slide, that the increments and decrements don't introduce data races, is still valid.

  • @oraz.
    @oraz. Год назад

    The variable length arrays in the examples are ok?

  • @mohamedhussien4013
    @mohamedhussien4013 Год назад

    Awesome, thank u so much.

  • @xiao_sings
    @xiao_sings 2 года назад +1

    this was great!

  • @cunningham.s_law
    @cunningham.s_law 6 месяцев назад

    if a unique pointer is the same in memory as a raw pointer, does that mean that I can reinterpretcast a raw pointer as a unique pointer and have it call the destructor?

    • @David_Olsen
      @David_Olsen 5 месяцев назад

      No. Don't try to do that. It won't work. A unique_ptr probably has the same memory layout as a raw pointer, but that is not guaranteed. Doing a reinterpret_cast does not create an object, so the destructor of the unique_ptr will not be run. If you have a raw pointer and you want its memory to be freed automatically, define a unique_ptr variable with the right lifetime and pass the raw pointer to the constructor.

  • @eeshvardasikcm
    @eeshvardasikcm 7 месяцев назад

    Thanks!

  • @nhanNguyen-wo8fy
    @nhanNguyen-wo8fy 5 месяцев назад

    9:29 unique pointer as member of class

  • @leili6490
    @leili6490 Год назад +1

    35:38
    some member of the committee should be ashamed of their inefficiency. they always use “pursuing perfection” as an excuse, but in fact they spent one three-year after another, and got one half-finished product after another

  • @ПетрПроценко
    @ПетрПроценко 4 дня назад

    Why videos like this one are not RUclips default suggestion instead of memes, violence and conspiracy theories?

  • @shivakumark.o846
    @shivakumark.o846 10 месяцев назад

    Thankyou

  • @Roibarkan
    @Roibarkan 2 года назад +1

    45:42 another good talk about some nice variations of smart pointers: ruclips.net/video/sjLRX4WMvlU/видео.html

  • @jjk15
    @jjk15 2 года назад

    nice

  • @rutabega306
    @rutabega306 2 года назад +1

    I'd argue that the first two examples don't need smart pointers.. what's wrong with std::vector??

    • @frenchmarty7446
      @frenchmarty7446 2 года назад +2

      Sometimes better performance (for creation and destruction*, not access which is the same) and less memory. Plus they signal to everyone that they shouldn't change in size.
      *there are exceptions where std::vector outperforms such as when the size is very large or you want to use std::move.

    • @David_Olsen
      @David_Olsen 5 месяцев назад +2

      std::vector could have been used in those examples, but I don't see it as the best solution. std::vector can fix some of the memory management problems as smart pointers. But std::vector also has all the semantics of a resizable array. Sometime you don't want that or need all that extra stuff. In the first two examples, all that was needed was to automatically free the memory. std::unique_ptr does exactly that, and nothing more, so it is the best fit for those situations.

  • @Lalasoth
    @Lalasoth 2 года назад +3

    As already pointed out (yes I know) this same topic was given by Arthur O'Dwyer three years ago. I check these out just in case there's something neat or new discussed.
    The audio in this video is terrible I couldn't finish watching it.

    • @paxdei1988
      @paxdei1988 Год назад +5

      Audio seems fine to me.

  • @pawello87
    @pawello87 2 года назад +1

    CppCon 2019 - Back to basics: Smart pointers. By Arthur O'Dwyer. What's the point of repeating the same topic three years later?

    • @treyquattro
      @treyquattro 2 года назад +30

      so that we eventually get it

    • @johnhsu5459
      @johnhsu5459 2 года назад +20

      Why does your university offers same classes every year while a recording is available?

    • @David_Olsen
      @David_Olsen 9 месяцев назад +4

      Topics on the Back to Basics track are often repeated, but the presenter is always different with the expectation that the talks will be different enough that each of them is useful. Arthur O'Dwyer's and my Smart Pointer talks are more similar than I would have preferred. But Mike Shah's and my Concurrency talks are nothing alike and there are benefits to watching both of them.

  • @agentstona
    @agentstona 5 месяцев назад

    THIS IS ALL A WASTE OF TIME JUST SWITCH TO RUST OR PYTHON where memory is automanaged for you .... WHY YOU wasting your time attempting to manage stuff that can be automated ....

    • @zeez7777
      @zeez7777 11 дней назад

      Maybe ponder a little first why people would do that before falsely concluding that you’re smarter than everyone else and we’re just wasting our time.

  • @mwilby3027
    @mwilby3027 2 года назад +5

    DId he fr just do an entire presentation reaeding a script

    • @VictorYarema
      @VictorYarema 2 года назад +24

      Reading a damn good well prepared script.

  • @treyquattro
    @treyquattro 2 года назад +12

    pretty perfunctory talk. All the huffing and blowing made it seem that Mr. Olsen was doing it under duress. Maybe let someone with a bit more enthusiasm for the subject do it next time?

    • @daver1964
      @daver1964 Год назад +19

      Did it? It could be a health issue, or nerves, or something else.

    • @debajyotimajumder472
      @debajyotimajumder472 10 месяцев назад +1

      I liked the content. Learnt something useful.

    • @debajyotimajumder472
      @debajyotimajumder472 10 месяцев назад +2

      I liked the content. Learnt something useful.

    • @mrphobos44
      @mrphobos44 9 месяцев назад

      Perhaps he just really wanted to eat those three little pigs.
      Great talk IMO.

    • @utilka5415
      @utilka5415 9 месяцев назад +3

      its smart pointers. It is perfectly understandable to lack enthusiasm on such a basic topic, but someone has to do such entry talks, just so we have an alternative entry point to those zoomer tutorials