c++: vector<Base> 可以包含 Derived 类型的对象吗?

标签 c++ vector polymorphism object-slicing

标题几乎说明了一切。基本上,这样做是否合法:

class Base {
    //stuff
}

class Derived: public Base {
    //more stuff
}

vector<Base> foo;
Derived bar;
foo.push_back(bar);

根据我看过的其他帖子,下面是可以的,但我不想在这种情况下使用指针,因为很难使其线程安全。

vector<Base*> foo;
Derived* bar = new Derived;
foo.push_back(bar);

最佳答案

不,Derived对象将是 sliced : 所有额外的成员都将被丢弃。

使用 std::vector<std::unique_ptr<Base> > 而不是原始指针.

关于c++: vector<Base> 可以包含 Derived 类型的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889178/

相关文章:

c++ - 模板结构的 vector

c++ - 具有多态性的派生类中的重载函数 (C++)

c# - 使用 new 关键字中断虚拟调用并再次启动新的虚拟层次结构

C++,将 vector<specific_type> 转换为 vector<boost::variant>

c++ - 迭代器拼接列表后存储了错误的值

c++ - 如何在wxWidgets中使用wxString、数字和其他字符串类型

c++ - 如何在第三方库调用的回调函数中传递/使对象/变量可访问?

c++ - 如何将 std::vector 名称视为 C 类型数组名称?

c++ - 从(模板)基类内部调用虚拟成员函数

C++:计算游戏中的总帧数