常量引用 位拷贝 拷贝构造函数
2011-05-12 21:39
218 查看
1 类里面的非常量函数是不可以别常量对象所调用的
测试代码如下:
编译的时候会出现如下错误:error C2662: 'NoConstFunc' : cannot convert 'this' pointer from 'const class HasConstAndNoconstFunction' to 'class HasConstAndNoconstFunction &'
原因:因为非常量函数的参数中会隐含调用对象的this指针,如果该对象是常量引用的话,是不允许外界改变它本身的内容的。
但是非常量函数有可能会改变this指针所以会存在问题
2 位拷贝 拷贝构造函数
首先说明的是 位拷贝指的是地址拷贝,而拷贝构造函数是值拷贝。
如果一个类里没有写明拷贝构造函数的话,那么当调用对象参数的函数的是时候,编译器会调用默认的拷贝构造函数,执行的是位拷贝。
这样的话就会存在以下问题:
第一,多次析构
第二,如果类中含有指针成员的话,那么会造成内存泄露,地址混乱。
测试代码如下:
#include<iostream> using namespace std; class HasConstAndNoconstFunction { public: void ConstFunc() const { cout<<"const function is start"<<endl; } void NoConstFunc() { cout<<"No const function is start"<<endl; } }; void Value_Func(HasConstAndNoconstFunction a) { a.ConstFunc(); a.NoConstFunc(); } void Rerence_Func(HasConstAndNoconstFunction& a) { a.ConstFunc(); a.NoConstFunc(); } void ConstRerence_Func(const HasConstAndNoconstFunction& a) { a.ConstFunc(); a.NoConstFunc(); } void main() { HasConstAndNoconstFunction a; Value_Func(a); Rerence_Func(a); ConstRerence_Func(a); }
编译的时候会出现如下错误:error C2662: 'NoConstFunc' : cannot convert 'this' pointer from 'const class HasConstAndNoconstFunction' to 'class HasConstAndNoconstFunction &'
原因:因为非常量函数的参数中会隐含调用对象的this指针,如果该对象是常量引用的话,是不允许外界改变它本身的内容的。
但是非常量函数有可能会改变this指针所以会存在问题
2 位拷贝 拷贝构造函数
首先说明的是 位拷贝指的是地址拷贝,而拷贝构造函数是值拷贝。
如果一个类里没有写明拷贝构造函数的话,那么当调用对象参数的函数的是时候,编译器会调用默认的拷贝构造函数,执行的是位拷贝。
这样的话就会存在以下问题:
第一,多次析构
第二,如果类中含有指针成员的话,那么会造成内存泄露,地址混乱。
相关文章推荐
- 拷贝构造函数与Const常量引用
- 拷贝构造函数的参数为什么必须使用引用类型(避免无限递归拷贝,但其实编译器已经强制要求了)
- 拷贝构造函数的参数为什么必须使用引用类型——避免拷贝死循环
- 不允许拷贝构造函数传值参数,而必须是传引用或者常量引用
- 【C++】C++问题——显式构造函数、常量引用返回值、深浅拷贝
- 条款5:类拷贝赋值操作符不能作用于-》常量成员变量和引用成员变量
- 拷贝构造函数和拷贝赋值运算符安全漏洞分析(引用)
- C++ 学习笔记(13)拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符、析构函数、右值引用、引用限定符
- 转载:C++拷贝构造函数(深拷贝,浅拷贝)
- C++编程思想学习笔记----第11章 引用和拷贝构造函数
- 171013—引用&常量
- string类的写时拷贝与引用计数
- C++拷贝构造函数(深拷贝,浅拷贝)
- C++拷贝构造函数(深拷贝,浅拷贝)
- 从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数
- Java面试题- java中函数传参传递的是引用的拷贝
- 拷贝构造函数,类的赋值运算符重载,深拷贝与浅拷贝
- 【C++】String拷贝(包含深拷贝浅拷贝)以及拷贝构造函数中几种调用的情况
- C++拷贝构造函数(深拷贝,浅拷贝)
- python语法31[引用和拷贝]