为什么人们定义私有拷贝构造函数?
何时使复制构造函数和赋值运算符私有化是一个好的设计?
如果有哪个是指针或处理到一个唯一的对象(如文件名)类没有成员,然后笏其他情况下都存在,其中私人拷贝构造函数是一个好主意?
同样的问题适用于赋值运算符.鉴于大多数C++围绕复制对象并通过引用传递,是否有任何涉及私有拷贝构造函数的好设计?
有时需要禁止C++类中的复制构造函数,以使类变为"不可复制".当然,operator=应该同时禁止.
到目前为止,我已经看到了两种方法.方法1是将方法声明为private并且不给它实现:
class Class {
//useful stuff, then
private:
Class( const Class& ); //not implemented anywhere
void operator=( const Class& ); //not implemented anywhere
};
Run Code Online (Sandbox Code Playgroud)
方法2是将方法声明为private并将其赋予"空"实现:
class Class {
//useful stuff, then
private:
Class( const Class& ) {}
void operator=( const Class& ) {}
};
Run Code Online (Sandbox Code Playgroud)
IMO第一个更好 - 即使有一些意外的原因导致从同一个类成员函数调用复制构造函数,稍后会出现链接器错误.在第二种情况下,在运行时之前不会注意到这种情况.
第一种方法有任何严重的缺点吗?什么是更好的方式,如果有的,为什么?