• FizzyOrange@programming.dev
      link
      fedilink
      arrow-up
      16
      ·
      1 month ago

      Its definitely best to try and avoid raw pointers, but even if you try really hard I found it’s not really possible to get a Rust-like experience with no UB.

      Even something as simple as std::optional - you can easily forget to check it has a value and then boom, UB.

      The C++ committee still have the attitude that programmers are capable of avoiding UB if they simply document it, and therefore they can omit all sanity checks. std::optional could easily have thrown an exception rather than UB but they think programmers are perfect and will never make that mistake. There are similar wild decisions with more recent features like coroutines.

      They somehow haven’t even learnt the very old lesson “safe by default”.

      If I wanted memory unsafety I think I would consider Zig instead of C++ at this point.

      • cinnamon_tea@programming.dev
        link
        fedilink
        arrow-up
        2
        ·
        1 month ago

        I recently got bitten by exactly that std::optional UB and here I was thinking 🤔 after 12+ years in the industry starting all the way back in the day with C++03 that modern C++ was supposed to make things better.😐