2011-01-01 8 views
5

En C++ 0x, ¿es legal/esperado que algunas clases se puedan copiar pero no mover? Estoy buscando implementar una clase heterogénea que cambie el tamaño, y no estoy seguro de poder manejarlo si algunas clases necesitan copia y algunas necesitan mudarse.Copiar pero no mover

Respuesta

5

Sí, es legal para una clase que sea, pero no copiable móvil:

class MyClass { 
public: 
    /* Copyable... */ 
    MyClass(const MyClass&); 
    MyClass& operator= (const MyClass&); 

    /* ... but not movable. */ 
    MyClass(MyClass&&) = delete; 
    MyClass& operator= (MyClass&&) = delete; 
}; 

Sin embargo, no puedo pensar en una buena razón de por qué alguien querría hacer esto. Sin embargo, al conocer codificadores de C++ (¡como yo!), Creo que debes anticipar que esto podría surgir.

Por curiosidad, ¿en qué código está confiando que se rompería si una clase fuera copiable pero no movible?

+0

Es una pila heterogénea que cambia de tamaño. Supongo que si quiero compatibilidad con C++ 03 con el mínimo esfuerzo, debería permitir ambas cosas. – Puppy

+1

Hmm ... ¿qué hay específicamente en el código que rompe con objetos copiables, inmóviles (supongo que es un término razonable para eso?)? Tengo curiosidad ya que nunca me he encontrado con esto antes. – templatetypedef

+0

Es bueno que hayas dicho eso. Por alguna razón, tenía en mente que los objetos que se movieron no necesitaban ser destruidos. Whoops. – Puppy

0

Estoy seguro de que hacer que el constructor de movimientos sea protegido/privado es una forma de limitar la capacidad de mover objetos de esa clase. Si puede esperar eso en una plantilla? No lo creo. Necesitaría std::enable_if para ese tipo de control.

Cuestiones relacionadas