Zee*_*yat -1 c++ arrays constructor pointers
我有一个hi带有非默认构造函数的类,它带有两个参数.我正在尝试构造一个his 数组:
class hi {
public:
hi(int a, int b){};
};
int main() {
hi *hello;
int number_of instance = 5;
hello = new hi[number_of_instance]; // (1)
}
Run Code Online (Sandbox Code Playgroud)
如何hi::hi(int,int)在标记的线上调用(1)?
如何调用
hi::hi(int,int)?
如果hi实际上是聚合类型和/或您正在使用C++ 11,则可以使用以下代码简单地构建它:
hello = new hi[5]{{1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}};
Run Code Online (Sandbox Code Playgroud)
如果hi不是聚合,本身就不能.但随着一些改进,我们可以实现它.
这给出了:
class hi {
hi();
public:
hi(int a, int b){};
};
Run Code Online (Sandbox Code Playgroud)
我的想法是为标准容器提供一个默认构造函数,即使它std::is_default_constructible_v<hi>是false.显然,任何实际默认构造的尝试hi都将以编译失败告终.
std::array或std::vector代替C数组:这给出了:
std::vector<hi> his;
Run Code Online (Sandbox Code Playgroud)
std::generate_n来构建你的对象:这给出了:
his.reserve(number_of_instances);
std::generate_n(std::back_inserter(his), number_of_instances, [](){ return hi{0, 0}; });
Run Code Online (Sandbox Code Playgroud)
但请注意,此向量作为非默认构造类型的向量是不完整的,您将无法使用其所有功能.
另一种方法是将一些内存保留为其中的数组unsigned char并hi使用placement news 构造其中的实例.