2010-09-13 15 views
7

Co oznaczają te dwie dziwne linie kodu?Co to jest "= usuń"?

thread_guard(thread_guard const&) = delete; 

thread_guard& operator=(thread_guard const&) = delete; 

Odpowiedz

11

The =delete to nowa funkcja C++ 0x. Oznacza to, że kompilator powinien natychmiast przestać kompilować i narzekać "ta funkcja jest usuwana", gdy użytkownik skorzysta z takiej funkcji (Zobacz także: defaulted and deleted functions -- control of defaults FAQ C++ 0x autorstwa Bjarne Stroustrup).

thread_guard(thread_guard const&) jest konstruktorem kopiującym, a thread_guard& operator=(thread_guard const&) jest konstruktem przypisania. Te dwie linie razem uniemożliwiają kopiowanie instancji thread_guard.

+1

Prawie. "Użycie" usuniętej funkcji w nienazwanym kontekście (na przykład jako wyrażenie "typu" decltype ") może zostać uznane za błąd odrzucenia argumentu szablonu. To sprawia, że ​​kompilator po prostu ignoruje szablon. Nie powoduje kompilacji kompilatora. – sellibitze

10

Jest to nowa składnia C++ 0x do wyłączania niektórych funkcji klasy. Zobacz przykład wikipedia. Tutaj mówisz, że klasa thread_guard nie jest ani kopiowalna, ani przypisywalna.

+0

Działa również dla innych funkcji. – sellibitze