首页 > 解决方案 > 多态类型的 C++ unique_ptr 数组

问题描述

我有以下问题。我有一个基类 A 的数组的 unique_ptr。在纯 C++ 中,用指向派生类型 B 的数组的指针进行初始化是没有问题的。现在使用 unique_ptr<A[]> 我无法让它工作。我没有看到问题,并希望避免使用自定义删除器路线。我的方法还有其他问题吗?

struct A {
    virtual ~A() {};
};

struct B : public A {
    int min, max;
};

unique_ptr<A[]> a_arr;

// fails
a_arr.reset(new B[2048]);
a_arr = make_unique<B[]>(2048);

// works
A* a_raw_arr = new B[2048];

标签: c++c++11

解决方案


@ChristopherYeighton 给了你原因。解决方法是使用 unique_ptr 数组,而不是指向数组的 unique_pointer。

std::unique_ptr<A> a_arr[2048] = {std::make_unique<B>()};

或者, a std::vectorofunique_ptr<A>也可以。

您从中获得的主要好处是,您现在可以在a_arr.


推荐阅读