¿Qué significan estas dos líneas extrañas de código?¿Qué es "= borrar"?
thread_guard(thread_guard const&) = delete;
thread_guard& operator=(thread_guard const&) = delete;
¿Qué significan estas dos líneas extrañas de código?¿Qué es "= borrar"?
thread_guard(thread_guard const&) = delete;
thread_guard& operator=(thread_guard const&) = delete;
El =delete
es una nueva característica de C++ 0x. Significa que el compilador debe detener inmediatamente la compilación y quejarse "esta función se elimina" una vez que el usuario utiliza dicha función (Ver también: defaulted and deleted functions -- control of defaults de C++ 0x Preguntas frecuentes por Bjarne Stroustrup).
thread_guard(thread_guard const&)
es un constructor de copia, y thread_guard& operator=(thread_guard const&)
es un constructor de asignaciones. Estas dos líneas juntas deshabilitan la copia de las instancias thread_guard
.
Es la nueva sintaxis de C++ 0x para deshabilitar ciertas funciones de la clase. Ver wikipedia para un ejemplo. Aquí está diciendo que la clase thread_guard
no se puede copiar ni asignar.
Funciona para otras funciones, también. – sellibitze
Casi. El "uso" de una función eliminada en un contexto no evaluado (por ejemplo, como expresión a 'decltype') puede calificar como una falla de deducción de argumento de plantilla. Esto hace que un compilador simplemente ignore una plantilla. No hace que el compilador deje de compilar. – sellibitze