问答

c – 如何初始化一个std :: array,其中T是不可复制的和非默认可构造的?

 来源    2019-02-03    0  

我有一定数量的T类对象是不可复制的和非默认构造的.由于大小是固定的,我想使用像std :: array这样的array-ish容器,而不是unique_ptr或vector.如果我可以帮助它,我想避免额外的间接层.

如何初始化std :: array?使用数组 {T(…),T(…)}导致有关已删除的复制构造函数的错误.使用数组 {move(T(…)),move(T(…))}不强制数组元素使用移动构造函数.如果std :: array本质上不起作用,如果不采用额外的间接层或手动内存管理技术(如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 – 初始化列表,用于初始化2D std :: array成员
问答如何通过初始化列表初始化嵌套(2D)std :: array? template <std::size_t W, std::size_t H> class Block { std::arr ...
1
c++ 我应该如何初始化一个boost :: array?
问答我正在努力了解boost array. code可以从作者的网站轻松阅读. 在设计理念中,作者(Nicolai M. Josuttis)提到以下两种类型的初始化是可能的. boost::array&l ...
1
从c 11中的用户定义的文字返回一个std :: array
问答我刚刚安装了gcc-4.8.1并且当我意识到我可以做-std = c 1y并获得多线constexpr时非常兴奋.我很想知道,无论如何要做到这一点? #include <array> co ...
1
c – 初始化非默认可构造元素的std ::数组?
问答假设类型foo_t具有命名的构造函数idiom,make_foo().现在,我想要真正拥有123个foo – 不多也不少.所以,我正在考虑一个std :: array.现在,如果foo_t是默认构造的 ...
1
c – 初始化非默认可构造对象的动态数组
问答代码如下: struct Foo { Foo(int){} // no default constructor }; int main() { Foo* pFoo = new Foo[2]{1,2}; ...
1
c – 我可以通过非默认构造函数构造具有零元素的std :: vector
问答我的意思是这样的: std::vector<T> v(0); 好吗?我没有在标准中看到这样的任何要求.::这是明确的定义.该标准对传递给此构造函数的n值没有任何限制. 0是size_typ ...
1
c – 如何构造非默认可构造对象的std :: vector?
问答我在C++ reference page中遇到过这样的代码: #include <algorithm> #include <list> #include <vector& ...
c – 是否有一个特定的语法用于从另一个不同的std :: array初始化std :: array?
问答我有这种情况: class A { ... }; class B { public: B(A x) { .... } } std::array<A, some_constant_value> ...
c – 初始化列表中的std :: array初始化列表初始化
问答虽然我非常喜欢C 11中的新功能,但有时我觉得我错过了它的一些细微之处. 初始化int数组工作正常,初始化Element2向量工作正常,但初始化Element2数组失败.我认为正确的语法应该是未注释的 ...
1
c – 当类没有constexpr构造函数时,简化冗余std :: array初始化
问答我有一个更复杂的以下代码版本: #include <array> #include <cmath> using namespace std; class Dummy { pub ...
1
c – std :: vector和std :: array初始化列表之间的区别
问答这个C 11代码对我来说很好: #include <iostream> #include <vector> #include <array> using names ...
1
c – 如何初始化没有默认构造函数的成员std :: array对象?
问答这是我遇到问题的代码: class Foo { public: Foo() : memberArray{Bar(1), Bar(3), Bar(2)} {} struct Bar { Bar(int ...
在C 11中有一个零大小的std :: array的原因吗?
问答考虑下面这段代码,这是C 11编译器完全可以接受的: #include <array> #include <iostream> auto main() -> int { ...
1
c – 从另一个const std :: map初始化const std :: map的一部分
问答我有一个const std :: map初始化如下: const std::map< int, std::string > firstMap = { { 1, "First&qu ...
1
c – 使用字符串字面值在构造函数中初始化std :: array成员. GCC错误?
问答以下示例初始化std :: array使用字符串文字的构造函数中的成员不会在GCC 4.8上编译,而是使用Clang 3.4进行编译. #include <iostream> #inclu ...
1
c – 从C数组初始化std :: array的正确方法
问答我从C API获取一个数组,我想将它复制到std :: array以便在我的C代码中进一步使用.那么这样做的正确方法是什么? I 2用于此,一个是: struct Foo f; //struct fr ...
2
为什么C 11 std :: array是一个结构而不是一个类?
问答出于好奇,我看了一下std :: array的LLVM实现,并注意到它是一个结构体.我看过的大多数其他STL容器(vector,queue,map)都是类.并且它作为结构出现在标准中,因此是故意的. ...
1
c 11 – std :: array的默认初始化?
问答使用标准C阵列语法T x [N];不默认初始化数组的元素.使用C 11 std :: array,我保证语法std :: array X;将默认初始化数组的所有元素? 编辑:如果不是,是否有一个语法, ...
1
如何在C 11中初始化(通过初始化列表)多维std :: array?
问答我试图通过初始化程序列表初始化2D std :: array但是编译器告诉我初始化程序太多了. 例如.: std::array<std::array<int, 2>, 2> s ...
1