2010-09-13 23 views
7

¿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; 

Respuesta

11

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.

+1

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

10

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.

+0

Funciona para otras funciones, también. – sellibitze