如何不允许调用对象的拷贝构造函数和赋值运算符
2012-11-26 17:54
190 查看
C++中,如果不自定义对象的拷贝构造函数和赋值运算符,编译器会为该类添加默认的拷贝构造函数和赋值运算符,而且都是public。
但是,有时候我们不希望编译器管太多“闲事”,比如,我们定义一个类,不允许进行拷贝,不允许调用拷贝构造函数和赋值运算符,那该怎么办呢?
那么,我们就希望,如果调用的此类的拷贝构造函数或者赋值运算符,编译器能够报错。我们可以采用,把拷贝构造函数和赋值运算符声明为private。这样的话,只要类的成员函数和友元函数不调用他们,外部调用就会在编译期间侦测出错误。
但是,难保类的成员函数和友元函数不调用,因此,可以采用“将成员函数声明为private,而且故意不实现他们”,这样的话,如果调用了他们,编译器也会报错。
当然,如果定义一个基类,把拷贝构造函数和赋值运算符声明为私有,子类以private继承自基类,这样的实现方式会更好。
但是,有时候我们不希望编译器管太多“闲事”,比如,我们定义一个类,不允许进行拷贝,不允许调用拷贝构造函数和赋值运算符,那该怎么办呢?
那么,我们就希望,如果调用的此类的拷贝构造函数或者赋值运算符,编译器能够报错。我们可以采用,把拷贝构造函数和赋值运算符声明为private。这样的话,只要类的成员函数和友元函数不调用他们,外部调用就会在编译期间侦测出错误。
但是,难保类的成员函数和友元函数不调用,因此,可以采用“将成员函数声明为private,而且故意不实现他们”,这样的话,如果调用了他们,编译器也会报错。
当然,如果定义一个基类,把拷贝构造函数和赋值运算符声明为私有,子类以private继承自基类,这样的实现方式会更好。
相关文章推荐
- 如何让classmethod只允许使用用类对象来调用
- C++构造函数、拷贝构造函数、赋值运算符重载 调用时机 GCC与VC在对象作为返回值的不同处理
- 如何让classmethod只允许使用用类对象来调用
- webservice 如何允许远程访问?如果使用javascript 调用 webservice
- 如何在osgi container之外调用osgi bundle的对象和方法
- 创建一个对象,构建器(构造器)的调用顺序是如何的?
- eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?
- 看对象是如何调用类成员变量的
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- 十、构造函数和析构函数(四) 拷贝构造函数、默认拷贝构造函数、拷贝构造函数调用几种情况、深拷贝浅拷贝、构造函数和=操作符区别、禁止对象拷贝
- BAPI调用 - 创建SO出现错误"不允许业务对象 BUS2032 和销售凭证类别 H 的组合"
- struts2如何动态调用action的方法以及使用json插件范围json格式的javascript对象
- 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法
- Java中,如何调用“其他类的方法中生成的实例化的对象”的属性?
- 【面向对象程序设计常见面试题】赋值运算符和拷贝构造函数的区别与联系?(3)
- spring 如何在普通类中调用注入的对象
- C++对象布局及多态之虚成员函数如何调用
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- Java - 如何通过反射调用对象的方法?
- jQuery调用WCF服务时如何传递对象参数