¿Cuál es la razón del requisito de QVector para el constructor predeterminado?

Puedo ver que esas clases se tratan como objetos complejos que se requieren para llamar al constructor predeterminado:

void QVector<T>::defaultConstruct(T *from, T *to)
{
    if (QTypeInfo<T>::isComplex) {
        while (from != to) {
            new (from++) T();
        }
    ...
}

Pero no está claro por qué es necesario construir objetos en el área 'oculta' de QVector. Quiero decir que estos objetos no son accesibles en absoluto, entonces, ¿por qué no solo reservar la memoria en lugar de la creación del objeto real?

Y como una pregunta adicional, me gustaría preguntar, si quiero tener una variedad de objetos que no se pueden consumir por defecto, ¿puedo reemplazarlos con seguridad?QVector<T> conQVector<Wrapper<T>? dóndeWrapper es algo así:

class Wrapper {
public:
    union {
        T object;
        bool hack;
    };
    Wrapper() {}
    Wrapper(const T &t) : object { t }  {}
    Wrapper(const Wrapper &t) : object { t.object } {}

    Wrapper &operator=(const Wrapper &value) {
        object = value.object;
        return *this;
    }

    ~Wrapper() {}
};

Respuestas a la pregunta(1)

Su respuesta a la pregunta