And how can I write my own array class to not need a default constructor for its elements? Right now, when I do the new [] to allocate space, I need a default const
You could allocate a block of bytes, then use placement new to make new instance of T
(your parametric type) via copy constructor (not default constructor of course) when new items are pushed to the vector's back. This will not allow to to make "a vector of N default-initialized Ts" (which std::vector can make - which is why it does need T to have a default constructor for this purpose), but you could make vectors that start empty and can have Ts pushed onto them.