Should SomeClass* initialEl = new SomeClass[5]; necessarily compile, assuming SomeClass does not have a non-publicly declared default constructor? Consider:
/*
* SomeClass.h
*
*/
#ifndef SOMECLASS_H_
#define SOMECLASS_H_
class SomeClass
{
public:
SomeClass(int){}
~SomeClass(){}
};
#endif /* SOMECLASS_H_ */
/*
* main.cpp
*
*/
#include "SomeClass.h"
int main()
{
SomeClass* initialEl = new SomeClass[5];
delete[] initialEl;
return 0;
}
No, it won’t compile without a default constructor. There is no compiler-generated default constructor in this case, because you have defined another constructor. “The compiler will try to generate one if needed and if the user hasn’t declared other constructors.” — The C++ Programming Language, Stroustrup
If you really want to use
new SomeClass[5], you’ll have to provide a default constructor as well.