2010-09-13 15 views
7

Was bedeuten diese beiden seltsamen Codezeilen?Was ist "= löschen"?

thread_guard(thread_guard const&) = delete; 

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

Antwort

11

Die =delete ist eine neue Funktion von C++ 0x. Dies bedeutet, dass der Compiler sofort aufhören sollte zu kompilieren und sich beschweren "Diese Funktion wird gelöscht", sobald der Benutzer eine solche Funktion benutzt (Siehe auch: defaulted and deleted functions -- control of defaults der C++ 0x FAQ von Bjarne Stroustrup).

Die thread_guard(thread_guard const&) ist ein Kopierkonstruktor und thread_guard& operator=(thread_guard const&) ist ein Zuweisungskonstruktor. Diese beiden Zeilen sperren daher das Kopieren der thread_guard Instanzen.

+1

Fast. Die Verwendung einer gelöschten Funktion in einem nicht bewerteten Kontext (z. B. als Ausdruck für "decltype") kann als Fehlschlagen eines Schablonenargumentabzugs gewertet werden. Das lässt einen Compiler eine Vorlage einfach ignorieren. Der Compiler wird nicht mehr kompiliert. – sellibitze

10

Es ist die neue C++ 0x-Syntax zum Deaktivieren der bestimmten Funktionen der Klasse. Ein Beispiel finden Sie in wikipedia. Hier sagen Sie, dass Klasse thread_guard weder kopierbar noch zuweisbar ist.

+0

Es funktioniert auch für andere Funktionen. – sellibitze