zar*_*tra 14 c++ arrays constructor initialization
在下面的代码中,我希望在调用Class构造函数时将数组定义为大小为x的数组.我怎样才能做到这一点?
class Class
{
public:
int array[];
Class(int x) : ??? { }
}
Run Code Online (Sandbox Code Playgroud)
Jef*_*ond 47
你们这些人过于复杂了.当然你可以用C++做到这一点.他可以使用普通数组来提高效率.如果向量不提前知道阵列的最终大小,即它需要随着时间的推移而增长,那么它才有意义.
如果您可以知道链中的数组大小高一级,则模板化类是最简单的,因为没有动态分配且没有内存泄漏的可能性:
template < int ARRAY_LEN > // you can even set to a default value here of C++'11
class MyClass
{
int array[ARRAY_LEN]; // Don't need to alloc or dealloc in structure! Works like you imagine!
}
// Then you set the length of each object where you declare the object, e.g.
MyClass<1024> instance; // But only works for constant values, i.e. known to compiler
Run Code Online (Sandbox Code Playgroud)
如果您无法知道声明对象的位置的长度,或者如果要重用不同长度的同一对象,或者您必须接受未知长度,那么您需要在构造函数中分配它并将其释放你的析构函数......(理论上总是要检查以确保它有效......)
class MyClass
{
int *array;
MyClass(int len) { array = calloc(sizeof(int), len); assert(array); }
~MyClass() { free(array); array = NULL; } // DON'T FORGET TO FREE UP SPACE!
}
Run Code Online (Sandbox Code Playgroud)
Căt*_*tiș 21
您无法使用无法在编译时计算的非const维度初始化数组的大小(至少在当前C++标准,AFAIK中不是这样).
我建议使用std::vector<int>而不是数组.它为大多数操作提供了类似于数组的语法.
Joh*_*ing 12
使用new运算符:
class Class
{
int* array;
Class(int x) : array(new int[x]) {};
};
Run Code Online (Sandbox Code Playgroud)
我认为这是不可能的。至少不是你想要的方式。当大小来自动态信息 (x) 时,无法创建静态大小的数组 (array[])。
您需要存储指向 int 的指针和大小,并重载复制构造函数、赋值运算符和析构函数来处理它,或者使用 std::vector。
class Class
{
::std::vector<int> array;
Class(int x) : array(x) { }
};
Run Code Online (Sandbox Code Playgroud)
你不明白吗,不需要使用向量,如果想使用数组,这是一个效率问题,例如更少的空间,没有复制时间(在这种情况下,如果处理得当,甚至不需要删除数组内的数组)析构函数)等,无论有什么原因。
正确答案是:(引用)
class Class
{
int* array;
Class(int x) : array(new int[x]) {};
};
Run Code Online (Sandbox Code Playgroud)
不要试图强迫人们使用非最佳替代方案,否则你会让没有经验的程序员感到困惑