【发布时间】:2020-09-15 12:25:23
【问题描述】:
我有以下问题。我有一个基类 A 的数组的 unique_ptr。在纯 C++ 中,用指向派生类型 B 的数组的指针初始化是没有问题的。现在使用 unique_ptr 我无法让它工作。我没有看到问题,并希望避免使用自定义删除器路线。我的方法还有其他问题吗?
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];
【问题讨论】:
-
你的最后一行可以编译,但它不像你想要的那样工作。无法编译的 uniqueptr 行是一件好事。
-
你为什么用
unique_ptr<A[]> a_arr;而不是std::vector<A> a_arr;? (或者为了这个问题,std::vector<A*> a_arr;或std::vector<std::unique_ptr<A>> a_arr;) -
"用指向派生类型B的数组的指针初始化是没有问题的"——我相信这实际上是个问题。
-
好的,我知道我哪里出错了。谢谢!