< prev index next >
src/hotspot/share/utilities/macros.hpp
Print this page
rev 57094 : [mq]: macro
rev 57096 : [mq]: trailing_semi
@@ -44,10 +44,23 @@
// sufficient, but two are used because of bugs in some preprocesors.
#define PASTE_TOKENS(x, y) PASTE_TOKENS_AUX(x, y)
#define PASTE_TOKENS_AUX(x, y) PASTE_TOKENS_AUX2(x, y)
#define PASTE_TOKENS_AUX2(x, y) x ## y
+// Declare the named class to be noncopyable. This macro must be used in
+// a private part of the class's definition, followed by a semi-colon.
+// Doing so provides private declarations for the class's copy constructor
+// and assignment operator. Because these operations are private, most
+// potential callers will fail to compile because they are inaccessible.
+// The operations intentionally lack a definition, to provoke link-time
+// failures for calls from contexts where they are accessible, e.g. from
+// within the class or from a friend of the class.
+// Note: The lack of definitions is still not completely bullet-proof, as
+// an apparent call might be optimized away by copy elision.
+// For C++11 the declarations should be changed to deleted definitions.
+#define NONCOPYABLE(C) C(C const&); C& operator=(C const&) /* next token must be ; */
+
// -DINCLUDE_<something>=0 | 1 can be specified on the command line to include
// or exclude functionality.
#ifndef INCLUDE_JVMTI
#define INCLUDE_JVMTI 1
< prev index next >