为什么我不能使用指向子类的唯一指针初始化多态向量 [duplicate]

Why can not I initialize a polymorphic vector using unique pointers to child classes [duplicate]

提问人:virus00x 提问时间:11/6/2023 更新时间:11/6/2023 访问量:50

问:

#include <iostream>
#include <memory>
#include <vector>

class Base {};    
class Child1 : public Base {};
class Child2 : public Base {};

int main()
{
    std::vector<std::shared_ptr<Base>> sb {
            std::shared_ptr<Child1>(),
            std::shared_ptr<Child2>()
    };

//    std::vector<std::unique_ptr<Base>> su1 {
//        std::make_unique<Child1>(),
//        std::make_unique<Child2>()
//    };

    std::vector<std::unique_ptr<Base>> su2;
    su2.push_back(std::make_unique<Child1>());
    su2.push_back(std::make_unique<Child2>());

    return 0;
}

在上面的代码中,注释的代码不会编译。为什么我们可以编译其他类似的代码呢?

C++ 唯一 PTR

评论

2赞 user12002570 11/6/2023
始终将错误与代码一起发布。
0赞 Yksisarvinen 11/6/2023
与继承无关。初始值设定项列表需要复制元素。
0赞 Pepijn Kramer 11/6/2023
基 B 不是多态的,它没有(纯)虚拟方法,也没有虚拟析构函数。你最终会得到这样的切片对象
0赞 Yksisarvinen 11/6/2023
@PepijnKramer 这里没有切片(切片与类是多态的无关)。尽管它可能会在析构函数中调用 UB,但尝试通过指向基类的指针删除。

答: 暂无答案