devxlogo

Zero Sized Arrays?

Zero Sized Arrays?

In standard C++, declaring arrays with zero elements is illegal:

           int n[0]; //illegal

However, certain compilers do support arrays of zero size as non-standard extension.

In contrast, dynamic allocation of zero sized arrays is valid C++:

           int n = new int[0]; 

The standard requires that in this case, new allocate an array with no elements. The pointer returned by new is non-null and it is distinct from a pointer to any other object. Similarly, deleting such a pointer is a legal operation.

While zero-sized dynamic arrays may seem like another C++ trivia that no one may ever need, this feature is chiefly important when implementing custom memory allocators: A custom allocation function may take any non-negative (i.e., unsigned) argument without worrying whether it’s zero.

           void * allocate_mem(unsigned int size)  {    //...no need to check whether size equals zero    return new char[size];  }

devx-admin

Share the Post: