多态类型的C++unique_ptr数组

C++ unique_ptr array of polymorphic type

本文关键字:ptr 数组 C++unique 类型 多态      更新时间:2024-03-28

我有以下问题。我有基类a的数组的unique_ptr。在纯C++中,用指向派生类型B的数组的指针初始化是没有问题的;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];

不能将派生类型的元素存储在基带的数组中,因为它们不适合。你能做的就是拥有一个指针数组。

@ChristopherYeleighton告诉了您原因。解决方法是使用unique_ptr的数组,而不是使用数组的unique_pointer。

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

或者,unique_ptr<A>std::vector也可以工作。

从中获得的主要好处是,现在可以在a_arr中拥有指向不同派生类的指针。