gpt4 book ai didi

c++ - 如何将兼容的唯一指针插入 vector ?

转载 作者:太空宇宙 更新时间:2023-11-04 16:19:15 24 4
gpt4 key购买 nike

例如,我有两个类ABB 派生自 A

class A {};
class B : public A {};

我有一个由 A 的唯一指针组成的 vector ,我可以将一个唯一指针推回该 vector 。

vector<unique_ptr<A>> vA;
unique_ptr<A> a(new A);
vA.push_back(std::move(a));

(1) 如何推回B的唯一指针?

vector<unique_ptr<A>> vA;
unique_ptr<B> b(new B);
vA.push_back(std::move(b)); //?

(2) 如果 vector 是B,如何推回A的唯一指针(假设它是向下转换的)

vector<unique_ptr<B>> vB;
unique_ptr<A> a(new B);
vB.push_back(std::move(a)); //?

最佳答案

(1) How to push back a unique pointer of B?

正如您所做的那样。这对你不起作用吗?如果不是,您会得到什么错误?

(2) If the vector is for B, how to push back a unique pointer of A

通常你不应该,因为没有办法判断指针是否实际指向 B。如果你真的知道自己在做什么,那么可怕的事情就像

vB.push_back(unique_ptr<B>(static_cast<B*>(a.release())));

应该做你想做的。对于多态类型,您可以使用 dynamic_cast(注意在转换失败时不要泄漏对象)以使其更安全。

关于c++ - 如何将兼容的唯一指针插入 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19096820/

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