多态类型的C++unique_ptr数组
C++ unique_ptr array of polymorphic type
我有以下问题。我有基类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
中拥有指向不同派生类的指针。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 唯一/共享 ptr 用于在数组超出范围后自动删除阵列
- 如何将函数 ptr 分配给函数 ptrs 数组(Arduino C++)
- 如何删除带有 int ptr 指向它的数组
- 动态2d数组:int(*ptr)[4]=new int[7][4];
- 有没有办法在数组上遍历shared_或任何"smart" ptr?
- 从数组的共享ptr访问共享ptr
- 分配const char *ptr数组参数?c++
- 按字母顺序排列字符串数组(甚至是*ptr)
- 使用ptr-to-ptr数组
- c++类的析构函数包含ptr到对象的数组