Co oznaczają te dwie dziwne linie kodu?Co to jest "= usuń"?
thread_guard(thread_guard const&) = delete;
thread_guard& operator=(thread_guard const&) = delete;
Co oznaczają te dwie dziwne linie kodu?Co to jest "= usuń"?
thread_guard(thread_guard const&) = delete;
thread_guard& operator=(thread_guard const&) = delete;
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
.
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.
Działa również dla innych funkcji. – sellibitze
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