Una tercera opción sería usar Boost.PointerContainer. Sin embargo, sus objetos se asignarán individualmente en el montón. Como Johann ha comentado, std :: vector ya hace uso del almacenamiento dinámico para almacenar objetos (contiguamente), por lo que no hay forma de evitar por completo el montón.
A menudo no tiene sentido permitir que los recursos (como mutexes, flujos de E/S, etc.) tengan semántica de copia. Por lo tanto, deben hacerse no copiables haciendo que el constructor de copias y el operador de asignación sean privados. Desafortunadamente, la restricción no copiable hace imposible almacenar recursos directamente como valores dentro de contenedores STL. Por lo tanto, uno debe recurrir a Boost.PointerContainer o contenedores de punteros inteligentes. La sección Motivation de la documentación de Boost.PointerContainer explica por qué prefiere usar una sobre otra.
¿por qué quiere dar los recursos predeterminados ctor? el vector solo requiere copiar ctor. – Naveen
"la opción 2 me obliga a usar el montón"; bueno, el vector también almacenará sus cosas en el montón (a menos que use un asignador personalizado), aunque en la memoria contigua. Por lo tanto, no podrá eludir el uso del montón de una manera u otra. –
encontró que estaba almacenando una referencia en mi recurso, por lo que el problema no era el constructor predeterminado, thx – dirk