如何向向量插入兼容的唯一指针?

use*_*020 0 c++ unique-ptr

例如,我有两个类AB.B源于A.

class A {};
class B : public A {};
Run Code Online (Sandbox Code Playgroud)

我有一个唯一指针的向量,A我可以推回一个指向向量的唯一指针.

vector<unique_ptr<A>> vA;
unique_ptr<A> a(new A);
vA.push_back(std::move(a));
Run Code Online (Sandbox Code Playgroud)

(1)如何推回一个独特的指针B

vector<unique_ptr<A>> vA;
unique_ptr<B> b(new B);
vA.push_back(std::move(b)); //?
Run Code Online (Sandbox Code Playgroud)

(2)如果向量是for B,如何推回一个唯一的指针A(假设它是向下的)

vector<unique_ptr<B>> vB;
unique_ptr<A> a(new B);
vB.push_back(std::move(a)); //?
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 5

(1)如何推回一个独特的指针B

正如你所做的那样.这不适合你吗?如果没有,你会得到什么错误?

(2)如果向量是for B,如何推回一个唯一的指针A

通常你不应该,因为没有办法判断指针是否实际指向a B.如果你真的知道自己在做什么,那就太糟糕了

vB.push_back(unique_ptr<B>(static_cast<B*>(a.release())));
Run Code Online (Sandbox Code Playgroud)

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