std :: vector <Foo> cuando algunos miembros de Foo son referencias

A menudo prefiero usar referencias a los punteros siempre que sea posible, en mi opinión hace que la sintaxis sea más limpia. En este caso, tengo una clase:

class Foo
{
public:
    Foo(Bar & bar) : bar_(bar) {}

private:
    Bar & bar_;
};

operator=() El compilador lo elimina implícitamente para una clase de este tipo, ya que una vez que se establece una referencia, no se puede cambiar (técnicamente puedo definir el mío que no cambia bar_, pero este no sería el comportamiento requerido, por lo que preferiría el compilador se queja si intento asignar un foo).

Lo que necesito es unstd::vector<Foo> v;. Esto es imposible antes de C ++ 11, ya que el parámetro de la plantilla debe ser CopyAssignable. De hecho, cuando llamov.push_back(Foo(bar));, el compilador se queja. Pero creo que podría ser posible desde C ++ 11 y Move semantics.

Mi pregunta es: ¿existe una solución alternativa con C ++ 11 que haría posible la construcción de un vector de este tipo, o estoy atascado en este caso y no tengo forma de utilizar los punteros en lugar de las referencias? Si hay una solución alternativa, apreciaría mucho un fragmento de código ya que no estoy familiarizado con la semántica de movimientos.

Respuestas a la pregunta(3)

Su respuesta a la pregunta