aka “bros: in order to be rich, just don’t be poor.”

  • TehPers@beehaw.org
    link
    fedilink
    English
    arrow-up
    6
    ·
    2 days ago

    The memory leaks section just feels like an introduction to smart pointers as though they’re some complex concept. Also, the page is showing its age by mentioning the now-removed auto_ptr instead of something like unique_ptr.

    Anyway, scrolling down a little more:

    Why can’t I assign a vector<Apple*> to a vector<Fruit*>?

    This actually comes up in C# with arrays. Copying their example here:

    object[] array = new String[10];
    // The following statement produces a run-time exception.
    // array[0] = 10;
    

    It may have been a design mistake not to make C#'s arrays invariant, though I don’t know the state of that debate today.

      • gedhrel@lemmy.world
        link
        fedilink
        arrow-up
        2
        ·
        1 day ago

        Neither covariant nor contravariant.

        supertype[] is not a supertype of subtype[] if supertype and subtype alone are in that relationship, because the mutability of arrays means that the Liskov substitution principle doesn’t hold.

        (These are all something you’ll probably find good explanations of on Wikipedia.)

        • tabular@lemmy.world
          link
          fedilink
          English
          arrow-up
          1
          ·
          1 day ago

          Thank you for your reply. Sadly I don’t know terms like covariant or supertype either 😅 so I’ll have to look into all that when/if it comes up. I write in GDScript for fun (a game engine’s high-level scripting language said to have syntax similar to Python).