Skip to content

Instantly share code, notes, and snippets.

@tetsuok
Created August 24, 2014 10:09
Show Gist options
  • Select an option

  • Save tetsuok/c11a04aeb19f8c3fb304 to your computer and use it in GitHub Desktop.

Select an option

Save tetsuok/c11a04aeb19f8c3fb304 to your computer and use it in GitHub Desktop.
disable copy and assign in C++98 and C++11
// g++ -std=c++11
class NonCopyable {
public:
NonCopyable() = default;
NonCopyable(const NonCopyable&) = delete;
void operator=(const NonCopyable&) = delete;
private:
friend class A;
};
class A {
public:
void f() {
NonCopyable a;
NonCopyable b(a); // error
}
void g() {
NonCopyable a;
NonCopyable b = a; // error
}
};
int main() {
{
NonCopyable a;
// NonCopyable b(a); // error
}
{
NonCopyable a;
// NonCopyable b = a; // error
}
// {
// A a;
// a.f();
// a.g();
// }
return 0;
}
class NonCopyable {
public:
NonCopyable() {}
private:
friend class A;
NonCopyable(const NonCopyable&);
void operator=(const NonCopyable&);
};
class A {
public:
void f() {
NonCopyable a;
NonCopyable b(a);
}
void g() {
NonCopyable a;
NonCopyable b = a;
}
};
int main() {
{
NonCopyable a;
// NonCopyable b(a); // error
}
{
NonCopyable a;
// NonCopyable b = a; // error
}
{
A a;
a.f();
a.g();
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment