boost::openmethod::virtual_ptr<SmartPtr, Registry>::operator=

Move‐assign from a smart pointer to a derived class

Synopsis

template<class Other>
requires SameSmartPtr<SmartPtr, Other, Registry> &&
            std::is_assignable_v<SmartPtr, Other&&> &&
            BOOST_OPENMETHOD_DETAIL_UNLESS_MRDOCS
                IsPolymorphic<typename Other::element_type, Registry>
virtual_ptr&
operator=(Other&& other);

Description

Move object pointer from other to this. Set the v‐table pointer according to the dynamic type of *other.

Example

virtual_ptr<std::shared_ptr<Dog>> snoopy = make_shared_virtual<Dog>();
Dog* moving = snoopy.get();
virtual_ptr<std::shared_ptr<Dog>> p;

p = std::move(snoopy);

BOOST_TEST(p.get() == moving);
BOOST_TEST(p.vptr() == default_registry::static_vptr<Dog>);
BOOST_TEST(snoopy.get() == nullptr);
BOOST_TEST(snoopy.vptr() == nullptr);

Requirements

  • SmartPtr and Other must be instantiated from the same template ‐ e.g. both std::shared_ptr or both std::unique_ptr.

  • Other must be a smart pointer to a polymorphic class derived from element_type.

  • SmartPtr must be constructible from Other&&.

Created with MrDocs