如果我有:
struct a_struct
{
int an_int;
a_struct(int f) : an_int(f) {}
a_struct() : an_int(0) {}
};
class a_class
{
a_struct * my_structs;
a_class() {...}
};
我能做到:
a_class() {my_structs = new a_struct(1)}
//or
a_class() {my_structs = new a_struct [10]}
但我不能做:
a_class() {my_structs = new a_struct(1) [10]}
//or
a_class() {my_structs = new a_struct() [10]}
有没有正确的语法可以让它工作?还是一个简单的解决方法?
答案 0 :(得分:5)
如果使用STL是一个选项,您可以使用std :: vector而不是动态数组。
我认为这会起作用:
std::vector<a_struct> my_structs;
my_structs.assign(10, 1);
如果没有,这应该:
my_structs.assign(10, a_struct(1));
答案 1 :(得分:3)
您可以分配原始内存块并使用展示位置新来初始化每个struct
:
int number_of_structs = 10;
my_structs = (a_struct*)new unsigned char[sizeof(a_struct) * number_of_structs];
// allocate a raw chunk of memory
a_struct* p = m_structs;
for (int i=0; i<number_of_structs; i++)
{
new (p) a_struct(i);
p++;
}
答案 2 :(得分:0)
您可以使用指向指针的数组。然后你可以创建一个包含指向a_struct()的指针的数组,这样你就可以决定以后使用哪个构造函数:
class a_class {
a_struct ** my_structs;
a_class() { my_structs = new a_struct* [10]}
void foo () {
my_structs[0] = new a_struct(1);
my_structs[5] = new a_struct("some string and float constructor", 3.14);
}
};
答案 3 :(得分:0)
您不能直接在任何特定的参数化构造函数上执行此操作。但是你可以这样做,
a_struct *my_struct[10] = {}; // create an array of pointers
for (int i = 0; i < 10; i++)
my_struct[i] = new a_struct(i); // allocate using non-default constructor
当您要取消分配内存时,
for (int i = 0; i < 10; i++)
delete my_struct[i] // de-allocate memory
我建议使用std::vector
容器而不是完成此过程。