gpt4 book ai didi

c++ - 如何初始化 std::array 其中 T 不可复制且不可默认构造?

转载 作者:可可西里 更新时间:2023-11-01 18:36:42 25 4
gpt4 key购买 nike

我有固定数量的 T 类对象,这些对象不可复制且不可默认构造。由于大小是固定的,我想使用类似数组的容器 std::array而不是 unique_ptrvector .如果可以的话,我想避免额外的间接层。

如何初始化 std::array<T, 2> ?使用 array<T, 2> {T(...), T(...)}导致有关已删除的复制构造函数的错误。使用 array<T, 2> {move(T(...)), move(T(...))}不强制数组元素使用移动构造函数。如果std::array<T, 2>本质上是行不通的,如果不求助于额外的间接层或手动内存管理技术(如 placement-new),我还能做什么?

最佳答案

不需要额外的东西,直接初始化即可:

class Foo {
public:
Foo() = delete;
Foo(int,char) {}

Foo(Foo const &) = delete;
Foo & operator = (Foo const &) = delete;
};
    std::array<Foo, 2> arr {{ {1, '1'}, {2, '2'} }};

DEMO

关于c++ - 如何初始化 std::array<T, 2> 其中 T 不可复制且不可默认构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38649378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com