CObject类是怎样禁用operator=和拷贝构造函数
来源:互联网 发布:mac foxmail 存储位置 编辑:程序博客网 时间:2024/05/21 11:07
class CObject
{
public:
virtual ~CObject(); // virtual destructors are necessary
// Disable the copy constructor and assignment by default so you will get
// compiler errors instead of unexpected behaviour if you pass objects
// by value or assign objects.
protected:
CObject();
private:
CObject(const CObject& objectSrc); // no implementation
void operator=(const CObject& objectSrc); // no implementation
};
我们看到
1:CObject类的构造函数都不是public类型,因此我们没能直接去定义一个CObject类型的对象,而必须要用CObject类的派生类去定义定义个对象。
2:为什么CObject();是protected类型而不是private类型呢?
这是因为,CObject类的派生类在定义对象时,只能调用CObject的public类型或protected类型的构造函数,而不能CObject类型的构造函数。
看MFC源代码:
// CObject
_AFX_INLINE CObject::CObject()
{ }
_AFX_INLINE CObject::~CObject()
{ }
3:
private:
CObject(const CObject& objectSrc); // no implementation
void operator=(const CObject& objectSrc); // no implementation
拷贝构造函数和赋值运算符重载函数在CObject只进行了声明而并没有去真正实现它们。只要我们的程序不去调用CObject类的这两个函数,那么程序就不会报错。一旦我们在程序中调用了这两个函数中的某一个,程序立马就会报错。
在这里,MFC之所以只在CObject类中声明了这两个函数而并没有去实现他们,这是为了防止在CObject的派生类中出现与“浅拷贝和深拷贝”相关的错误。如果我们想在CObject的派生类中使用这两个函数,就必须在派生类中去真正实现它们。
- CObject类是怎样禁用operator=和拷贝构造函数
- C++拷贝构造函数和operator=
- 拷贝构造函数, operator =
- C++拷贝构造函数和赋值操作(operator=)
- 拷贝构造函数与重载operator =
- 拷贝构造函数与operator=
- C++拷贝构造函数 operator =
- 拷贝构造和operator=的区别
- C++的拷贝构造函数、operator=运算符重载,深拷贝和浅拷贝、explicit关键字
- 怎样偷懒处理拷贝构造函数和拷贝赋值函数???
- 实现一个string类,包括构造、析构、拷贝构造及operator= 函数
- 拷贝构造函数和赋值操作符operator=分别在什么时候被调用?
- C++拷贝构造函数深入分析以及重写operator =
- C++拷贝构造函数及重写operator =的区别
- C++拷贝构造函数深入分析以及重写operator =
- 对拷贝构造函数与operator=的理解
- C++拷贝构造函数及重写operator =的区别
- C++拷贝构造函数及重写operator =的区别
- dll导出的类 动态调用构造函数 报错 是什么原因啊
- c# web fileUpload实现多文件上传
- asp.net TextBox OnFocus OnBlur显示与消失
- 一个Java程序员应该掌握的10项技能
- 为啥国内的soft Company都不喜欢规范化呢
- CObject类是怎样禁用operator=和拷贝构造函数
- iphone应用开发之 --视图之间的小发现.
- AMSS - Advanced Mobile Subscriber Software
- 更改oracle数据库归档模式
- 世界上都有哪些常用的聊天软件?
- js全页面刷新方法
- 轻轻地。。。
- java工程师的成长计划(转)
- 解决MYSQL编码问题