例如,我有两个类A
和B
。 B
派生自 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 ofA
通常你不应该,因为没有办法判断指针是否实际指向 B
。如果你真的知道自己在做什么,那么可怕的事情就像
vB.push_back(unique_ptr<B>(static_cast<B*>(a.release())));
应该做你想做的。对于多态类型,您可以使用 dynamic_cast
(注意在转换失败时不要泄漏对象)以使其更安全。
关于c++ - 如何将兼容的唯一指针插入 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19096820/