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
5
A
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
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
- 1. Linux cómo copiar pero no sobreescribir?
- 2. Al mover/copiar instancias de objetos C++
- 3. Mover/Copiar operaciones de archivos en Java
- 4. R: copiar/mover un entorno a otro
- 5. cómo mover cambios comprometidos pero no apilados a otra rama?
- 6. cómo copiar una estructura de objetos (pero no los datos)
- 7. la combinación de dos constructores que copiar y mover
- 8. No se pueden copiar/mover archivos con espacio al final del nombre de archivo
- 9. no copiar istringstream
- 10. Powershell Copy-Item pero sólo copiar los archivos modificados
- 11. Puede Groovy copiar una firma de clase pero modificar implementaciones
- 12. Mover archivos entre carpetas
- 13. ¿Cómo no copiar algunos atributos?
- 14. MySQL: ¿Cómo copiar filas, pero cambiar algunos campos?
- 15. UITextField: no se puede escribir texto, pero los emoticones, copiar/pegar y retroceder están bien
- 16. Mover/copiar archivos/carpetas en linux/solaris usando solo compilaciones de bash
- 17. ¿es posible mover/copiar un depósito s3 a una cuenta diferente?
- 18. JCrop - No se puede mover la selección
- 19. PHP: move_uploaded_file(): No se puede mover '/
- 20. Biblioteca .Net para mover/copiar un archivo mientras conserva las marcas de tiempo
- 21. "mover" dos vectores juntos
- 22. Copiar el repositorio SVN
- 23. Usar std :: mover() al devolver un valor de una función para evitar copiar
- 24. std :: vector :: erase() no se quiere mover
- 25. TortoiseSVN: Mover archivo no conserva el historial
- 26. Mover RavenDb a otro servidor
- 27. UIPasteboard - no se puede copiar el texto
- 28. ¿Cuál es la forma "correcta" de escribir Copiar/Mover/operador = trío en C++ 11?
- 29. ¿Cómo mover/copiar un archivo de una carpeta a otra en Android usando phonegap?
- 30. ¿Cómo copiar una matriz?
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
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
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