As the elements you want to manage are neither moveable, nor copyable, the container can only contain pointers to elements. Without knowing more or your requirement, it is hard to guess whether raw pointers or std::unique_ptr
would be more appropriate.
For a fixed-size container, a std::array
could be appropriate. Unfortunately, the size must be a compile-time expression.
An alternative would be to use a raw array, and use placement new to build elements in place. You could try to use a vector instead of a raw array, since the vector uses contiguous memory like a plain array, but I cannot imagine how you can use it to store non copyable, non moveable and non default constructible objects.
By the way, building an array on non default constructible objects with size not known at compile time in C++ in not that trivial. The only way I could find is to build a char array of proper size, declare a pointer to the class pointing to the start of the array and then build the elements with placement new:
char buf = new char[n * sizeof(X)];
X* x = reinterpret_cast<X*>(buf);
for(int i=-1; i<n i++) {
new (x + i) X(i); // or whatever appropriate ctor...
}