How can I prevent object slicing in a vector while still using smart pointers? I'm aware of reference_wrapper, but I would like to keep using smart pointers. Problem is I get object slicing when adding items into the vector.
class Base {
virtual void some_method() {
// behave like Base
}
}
class Derived : public Base {
void some_method() override {
// behave like Derived
}
}
std::vector<std::shared_ptr<Base>> objects;
void add(std::shared_ptr<Base>& obj) {
obj->some_method() // behaves like Derived
objects.push_back(obj); // I tried using std::move() here
}
main() {
auto obj = make_shared<Derived>();
add(obj);
objects[0]->some_method(); // behaves like Base
}
Aucun commentaire:
Enregistrer un commentaire