我想知道你是否可以使用emplace_back将项目存储到一个向量中,这是一种从向量所期望的类派生的类型。
例如:
struct fruit
{
std::string name;
std::string color;
};
struct apple : fruit
{
apple() : fruit("Apple", "Red") { }
};
其他地方:
std::vector<fruit> fruits;
我想在向量中存储apple类型的对象。这可能吗?
答案 0 :(得分:9)
没有。向量仅存储固定类型的元素。你想要一个指向对象的指针:
#include <memory>
#include <vector>
typedef std::vector<std::unique_ptr<fruit>> fruit_vector;
fruit_vector fruits;
fruits.emplace_back(new apple);
fruits.emplace_back(new lemon);
fruits.emplace_back(new berry);
答案 1 :(得分:2)
std::vector<fruit> fruits;
它只在水果中存储水果而不是派生类型,因为分配器只为每个元素分配sizeof(fruit)
。为了保持多态性,你需要将指针存储在水果中。
std::vector<std::unique_ptr<fruit>> fruits;
fruits.emplace_back(new apple);
apple是在免费商店中动态分配的,当元素从vector中删除时将被释放。
fruits.erase(fruits.begin());