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

标签 c++ unique-ptr

例如,我有两个类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/

相关文章:

c++ - 通过右值引用获取参数的所有权

c++ - 将 unique_ptr 传递给函数后如何使用它?

C++ 11 unordered_map 段错误

c++ - Serial.println() 影响 Serial1 读数

c++ - 如何以更通用的方式转换 unique_ptr 的 vector

c++ - unique_ptr 的临时只读拷贝

c++ - 具有类型删除析构函数的 unique_ptr 不太有效(有警告)

c++ - 在参数包中分配模板包装器

javascript - 将信息从 c++ cgi 脚本传递到 javascript 标签的问题

c++ - 2个类的getter继承问题