Determine array size in constructor initializer Determine array size in constructor initializer arrays arrays

Determine array size in constructor initializer


You folks have so overcomplicated this. Of course you can do this in C++. It is fine for him to use a normal array for efficiency. A vector only makes sense if he doesn't know the final size of the array ahead of time, i.e., it needs to grow over time.

If you can know the array size one level higher in the chain, a templated class is the easiest, because there's no dynamic allocation and no chance of memory leaks:

template < int ARRAY_LEN > // you can even set to a default value here of C++'11class 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

If you can't know the length at the place you declare the object, or if you want to reuse the same object with different lengths, or you must accept an unknown length, then you need to allocate it in your constructor and free it in your destructor... (and in theory always check to make sure it worked...)

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!  }


You can't initialize the size of an array with a non-const dimension that can't be calculated at compile time (at least not in current C++ standard, AFAIK).

I recommend using std::vector<int> instead of array. It provides array like syntax for most of the operations.


Use the new operator:

class Class{   int* array;   Class(int x) : array(new int[x]) {};};