c++ - 多态类型的 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];
解决方案
@ChristopherYeighton 给了你原因。解决方法是使用 unique_ptr 数组,而不是指向数组的 unique_pointer。
std::unique_ptr<A> a_arr[2048] = {std::make_unique<B>()};
或者, a std::vector
ofunique_ptr<A>
也可以。
您从中获得的主要好处是,您现在可以在a_arr
.