如何禁止对象之间的拷贝?
将构造函数和析构函数中的任意一个设置为private,如下:
class A{ public: A(){}; private: ~A(){}; A(const A&a){}; A &operator=(const A&a){return a;} }; A a;
编译报错提示:Variable of type ‘A‘ has private destructor.
我们知道,如果我们不显性的声明拷贝构造函数和重载=,那么编译器会为我们提供默认的拷贝构造函数和copy assignment函数。这样一来,对象间的拷贝就会发生,如果要禁止对象间的拷贝,那么就要显性的声明,无需定义。
class A{ public: A(){}; ~A(){}; A(const A&a){}; private: A &operator=(const A&a){return a;} }; A c,d; c=d;
编译报错:‘operator=‘ is a private member of ‘A‘
时间: 2024-11-03 22:49:54