读《深度探索C++对象模型》之拷贝构造函数是否有必要明确定义?
来源:互联网 发布:影武者2优化 编辑:程序博客网 时间:2024/05/19 17:56
我想,对于大部分程序员来说,一般的类都会定义构造函数/虚构函数/拷贝构造函数/赋值函数等,但是真的有必要吗,难道让编译器默认替我们定义一个不好吗,请看以下例子:
class Point{public:Point(float x, float y, float z){_x = x;_y = y;_z = z;}private:float _x, _y, _z;};int main(){double dur;clock_t start, end;start = clock();for (unsigned int i = 0; i < 10000000; i++){Point p(0, 1, 1);Point t1(p);}end = clock();dur = double(end - start);printf("Use time: %f\n", (dur/CLOCKS_PER_SEC));system("pause");return 0;}以上的类很简单,只含有三个数据变量,为了明显区分时间,因此我执行10000000次,上面的执行时间如下:
那如果我们明确声明了一个拷贝构造函数呢,时间又是如何呢?
class Point{public:Point(float x, float y, float z){_x = x;_y = y;_z = z;}Point(const Point& rhs){_x = rhs._x;_y = rhs._y;_z = rhs._z;}private:float _x, _y, _z;};执行时间如下:
天啊,简直差不多两倍了,这也许是编译器为我们做过优化了吧。
假如我把拷贝函数改成这样:
Point(const Point& rhs){memcpy(this, &rhs, sizeof(rhs));}时间竟然更长了,很难想象:
所以,对于像这种的,不需要声明拷贝构造函数的,我们就不用画蛇添足吧,让编译器替我们默默构造就好了。
0 0
- 读《深度探索C++对象模型》之拷贝构造函数是否有必要明确定义?
- 《深度探索C++对象模型》:拷贝构造函数
- 《深度探索c++ 对象模型》有感之默认构造函数,拷贝构造函数,拷贝运算符的合成
- 【C++】深度探索C++对象模型之构造、析构、拷贝语意学
- [深度探索C++对象模型] 默认构造函数和拷贝构造函数的构造操作
- 深入探索C++对象模型之拷贝构造函数
- 深度探索C++对象模型 之 构造函数语意学
- 《深度探索C++对象模型》笔记(三)构造函数、拷贝构造和初始化列表
- 《深度探索C++对象模型》:构造函数
- 深入探索C++对象象模型--拷贝构造函数、对象模型
- 深度探索C++对象模型之构造、解构、拷贝语意学小结
- 《深度探索C++对象模型》读书笔记之构造、析构、拷贝语意学
- 《深度探索C++对象模型》读书笔记之构造、析构、拷贝语意学
- C++对象模型之拷贝构造函数
- 深度探索C++对象模型第二章 构造函数语义学
- 深度探索C++对象模型 2构造函数语意学
- 《深度探索C++对象模型》--2 构造函数语意学
- 深度探索C++对象模型--构造函数语义学
- matlab debug
- [算法]判断两个字符串是否由相同的字符组成
- UFLDL 教程学习笔记(二)反向传导算法
- IP地址与域名之间的转换(Linux + GCC)
- 《Linux内核设计的艺术》学习笔记(一)从开机加电到执行main函数之前的过程
- 读《深度探索C++对象模型》之拷贝构造函数是否有必要明确定义?
- XMLHttpRequest发送XML请求
- Linux 下 zip、tar、tar.gz、tar.bz2 详解
- HDU2084数塔
- 通知服务的使用问题
- Hadoop 处理小文件
- 软考程序员随笔 -----1
- html复习第五天 表单输入
- (一)JDK和Eclipse安装