gpt4 book ai didi

c++ - 从存储派生类的基类 vector 实例化 unique_ptr 到派生类

转载 作者:搜寻专家 更新时间:2023-10-31 02:04:18 25 4
gpt4 key购买 nike

考虑以下代码:

struct  Fruit
{
Fruit() {}
virtual ~Fruit() {}
std::string name;
};

struct Banana : public Fruit
{
std::string color;
};

struct Pineapple : public Fruit
{
int weight;
};

这是我的 main() :

int main()
{
std::vector<std::unique_ptr<Fruit>> product;
product.push_back(std::unique_ptr<Banana>(new Banana)); //product[0] is a Banana
product.emplace_back(new Pineapple);

// I need to acess the "color" member of product[0]
std::unique_ptr<Banana> b = std::move(product[0]); // this doesn't work, why?
auto c = b->color;
}

product[0] 中,我将 unique_ptr 存储到 Banana,为什么我不能将它分配给香蕉 unique_ptr ?

最佳答案

你不想转移所有权,所以只投指针:

auto& banana = dynamic_cast<Banana&>(*product[0]);
auto c = banana.color;

dynamic_cast 可能会被替换为 static_cast 如果你真的确定 Fruit 真的是一个 Banana。如果您错了,static_cast 会导致 UB,而您可以使用 dynamic_cast 检查有效性(强制转换为引用或空指针强制转换为指针的情况除外)。

关于c++ - 从存储派生类的基类 vector 实例化 unique_ptr 到派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53745050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com