例如,我有两个类A和B.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)
(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(如果转换失败,请注意不要泄漏对象)以使其更安全.
| 归档时间: |
|
| 查看次数: |
304 次 |
| 最近记录: |