首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >emplace_back和继承

emplace_back和继承
EN

Stack Overflow用户
提问于 2013-01-20 09:29:27
回答 2查看 2.6K关注 0票数 6

我想知道您是否可以使用emplace_back将项目存储到向量中,这是一种从向量期望的类派生的类型。

例如:

代码语言:javascript
复制
struct fruit
{
    std::string name;
    std::string color;
};

struct apple : fruit
{
    apple() : fruit("Apple", "Red") { }
};

其他地方:

代码语言:javascript
复制
std::vector<fruit> fruits;

我想在向量中存储一个苹果类型的对象。这个是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-20 09:30:55

不是的。向量只存储固定类型的元素。你想要一个指向对象的指针:

代码语言:javascript
复制
#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);
票数 10
EN

Stack Overflow用户

发布于 2013-01-20 09:33:01

std::vector<fruit> fruits;它只存储水果中的水果,而不是派生类型,因为分配器只为每个元素分配sizeof(fruit)。为了保持多态性,你需要在水果中存储指针。

代码语言:javascript
复制
std::vector<std::unique_ptr<fruit>> fruits;
fruits.emplace_back(new apple);

苹果是动态分配的免费商店,将释放时,元素是从矢量中删除。

代码语言:javascript
复制
fruits.erase(fruits.begin());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14420826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档