如何不允许调用对象的拷贝构造函数和赋值运算符

来源:互联网 发布:mac 音量快捷键 编辑:程序博客网 时间:2024/06/18 00:27

        C++中,如果不自定义对象的拷贝构造函数和赋值运算符,编译器会为该类添加默认的拷贝构造函数和赋值运算符,而且都是public。

        但是,有时候我们不希望编译器管太多“闲事”,比如,我们定义一个类,不允许进行拷贝,不允许调用拷贝构造函数和赋值运算符,那该怎么办呢?

        那么,我们就希望,如果调用的此类的拷贝构造函数或者赋值运算符,编译器能够报错。我们可以采用,把拷贝构造函数和赋值运算符声明为private。这样的话,只要类的成员函数和友元函数不调用他们,外部调用就会在编译期间侦测出错误。

        但是,难保类的成员函数和友元函数不调用,因此,可以采用“将成员函数声明为private,而且故意不实现他们”,这样的话,如果调用了他们,编译器也会报错。

        当然,如果定义一个基类,把拷贝构造函数和赋值运算符声明为私有,子类以private继承自基类,这样的实现方式会更好。

原创粉丝点击