如何解决多态类型的C ++ unique_ptr数组
我有以下问题。我对基类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];
解决方法
您不能将派生类型的元素存储在基带的数组中,因为它们不适合。您可以做的就是拥有一个指针数组。
,@ChristopherYeleighton给了你原因。解决方法是使用unique_ptr数组,而不是数组的unique_pointer。
std::unique_ptr<A> a_arr[2048] = {std::make_unique<B>()};
或者,std::vector
中的unique_ptr<A>
也可以使用。
您获得的主要好处是,现在您可以在a_arr
中使用指向不同派生类的指针。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。