std::enable...s::operator=(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’… NAME

okay so bestie, welcome to the C++ Standard Libary manual β€” this page is std::enable...s::operator=(3). The NAME is literally std::enable_shared_from_this::operator= - std::enable_shared_from_this::operator=. Yes, twin names, iconic behavior. πŸ’…βœ¨

✨ Synopsis ✨

Here's the whole signature vibe, since C++11:

          enable_shared_from_this& operator=( const enable_shared_from_this
       (since C++11)
          &rhs ) noexcept;

The actual description is: Does nothing; returns *this. Like, zero drama, no cap. 🫢

🫢 Parameters 🫢

  • rhs β€” another enable_shared_from_this to assign to *this. Basically the other one in the assignment situation, bestie.

πŸŽ€ Return value πŸŽ€

  • *this β€” that's the whole return value. Simple, clean, slay. πŸŽ€

🧚 Notes 🧚

The exposition-only std::weak_ptr<T> member weak-this is not affected by this assignment operator. So like, it's sitting there unbothered, main character energy. πŸ’œ

🌸 Example 🌸

Note: enable_shared_from_this::operator= is defined as protected in order to prevent accidental slicing but allow derived classes to have default assignment operators. 🫢

// Run this code

        #include <iostream>
        #include <memory>

        class SharedInt : public std::enable_shared_from_this<SharedInt>
        {
        public:
            explicit SharedInt(int n) : mNumber(n) {}
            SharedInt(const SharedInt&) = default;
            SharedInt(SharedInt&&) = default;
            ~SharedInt() = default;

            // Both assignment operators use enable_shared_from_this::operator=
            SharedInt& operator=(const SharedInt&) = default;
            SharedInt& operator=(SharedInt&&) = default;

            int number() const { return mNumber; }

        private:
            int mNumber;
        };

        int main()
        {
            std::shared_ptr<SharedInt> a = std::make_shared<SharedInt>(2);
            std::shared_ptr<SharedInt> b = std::make_shared<SharedInt>(4);
            *a = *b;

            std::cout << a->number() << '\n';
        }

Output:

4

πŸ‘‘ See also πŸ‘‘

  • shared_ptr β€” smart pointer with shared object ownership semantics (C++11) (class template). Obsessed. πŸ‘‘

kiss kiss πŸ’‹ β€” this page is from http://cppreference.com, dated 2024.06.10, and it's page std::enable...s::operator=(3). Bye bestie! πŸ¦‹βœ¨

πŸ“¦ where this page comes from