C++ C++;类数组的动态分配

C++ C++;类数组的动态分配,c++,dynamic-allocation,C++,Dynamic Allocation,假设a类X具有构造函数X(inta,intb) 我创建一个指向X的指针,作为X*ptr为类动态分配内存 现在创建一个X类对象数组 ptr = new X[sizeOfArray]; 直到现在一切都很好。但是我想做的是创建上面的对象数组应该调用构造函数X(inta,intb)。我做了如下尝试: ptr = new X(1,2)[sizeOfArray]; 正如所料,它给了我编译时错误 错误:应为“;”在“[”标记之前| 如何创建一个对象数组来调用构造函数 SizeOfArray由用户在运行

假设a
类X
具有构造函数
X(inta,intb)

我创建一个指向X的指针,作为
X*ptr
为类动态分配内存

现在创建一个X类对象数组

 ptr = new X[sizeOfArray];
直到现在一切都很好。但是我想做的是创建上面的对象数组应该调用构造函数
X(inta,intb)
。我做了如下尝试:

ptr = new X(1,2)[sizeOfArray]; 
正如所料,它给了我编译时错误

错误:应为“;”在“[”标记之前|

如何创建一个对象数组来调用构造函数


SizeOfArray
由用户在运行时输入

编辑:
我想在ZeNess中实现的可能是不可能的,或者太复杂。那么,我怎么能使用<代码> STD::vector < /代码>?

< p>在当前的C++标准中是不可能的,除非:

  • 为每个元素提供初始值设定项,或
  • 使用
    向量
见:

这似乎是

以下是一个基本示例:

#包括
#包括//size\t
#包括//新位置
使用std::cout;
使用std::endl;
结构X
{
X(inta_,intb_):a{a_},b{b_}{
INTA;
int b;
};
int main()
{
常量大小元素大小=大小f(X);
常量大小元素计数=10;
//将要放置新对象的内存
字符*内存=新字符[元素计数*元素大小];
//下一个插入索引
大小插入索引=0;
//在地址中构造一个新的X(位置+插入索引)
void*place=内存+插入索引;
X*X=新(地点)X(1,2);
//提前插入索引
插入索引+=元素大小;
//查看新对象

不能说sizeOfArray是变量还是常量。如果它是(小)常量,可以在C++11中执行此操作:

X* ptr = new X[3] { {1,2}, {1,2}, {1,2} };

为什么不
std::vector
?学校作业..不能使用STL进行编辑:
std::vector xs(sizeOfArray,X(1,2))
@Pushkar:如果你想要求澄清zenith的回答,请在对他的回答的评论中这样做。也就是说,^Jarod42的评论是正确的。
std::aligned_storage
可能会有帮助。但是
std::vector
更简单。
std::aligned_storage
当然很有趣。至于
std::vector
,OP是必需的ed不使用它。此外,我认为。请参见编辑。我可能会尝试
std::vector
,因为这似乎太复杂了,我正在通过setter函数类分配内存。函数返回后,数据会保留在内存中吗?@OP除非您提供您所做的实际代码片段,否则我恐怕无法给您一个relevant answer.
SizeOfArray
由用户在运行时输入
#include <vector>
// init a vector of `element_count x X(1, 2)`
std::vector<X> vec(element_count, X(1, 2));

// you can still get a raw pointer to the array as such
X* ptr1 = &vec[0];
X* ptr2 = vec.data();  // C++11
X* ptr = new X[3] { {1,2}, {1,2}, {1,2} };