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

Assign from a smart virtual pointer to a derived class

Synopsis

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

Description

Copy the object and v‐table pointers from other to this.

Other is not required to be a pointer to a polymorphic class.

Example

struct Animal {}; // polymorphism not required
struct Dog : Animal {}; // polymorphism not required
BOOST_OPENMETHOD_CLASSES(Animal, Dog);
initialize();

virtual_ptr<std::shared_ptr<Dog>> snoopy = make_shared_virtual<Dog>();
virtual_ptr<std::shared_ptr<Dog>> p;

p = snoopy;

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

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 virtual pointer to a class derived from `element_type`.

  • `SmartPtr` must be constructible from `Other&`.

Created with MrDocs