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