如何禁止C++ 类支持拷贝
C++ 编译器默默地为你做了不少工作
解决方案:
-
将拷贝构造函数和copy assignment 声明为 private, 并不给出实现; 一般而言,member 函数和 friend 函数还是有可能调用它们,这会导致一个链接错误(因为你没有定义函数)
class A {
public:
private:
A(const A &rhs); //只有声明
A& operator=(const A &rhs);
};
-
更好的做法,可以将做法1 的连接错误转移到编译期(越早发现错误越好)。让类继承 如下的base 类这可行的原因在于:只要任何人----甚至是 member 函数 或 friend 函数-----尝试拷贝对象,编译器都会试着生成一个 copy 构造函数和
copy assignment 操作符,而这些函数的“编译器生成版”会尝试调用 base class 的对应兄弟,而这些调用会被编译器拒绝,因此 base class 的拷贝函数是 private。
class Uncopyable {
public:
Uncopyable() {}
~Uncopyable() {}
private:
Uncopyable(const Uncopyable&);
Uncopyable& operator=(const Uncopyable&);
};
class B : private Uncopyable {
};
如何禁止C++ 类支持拷贝,布布扣,bubuko.com
如何禁止C++ 类支持拷贝