copy拷贝构造函数
2015-12-07 22:01
288 查看
引入
首先我们看一段代码:static int count =0; class howmany { public: howmany(){ count++; std::cout<<"constructor:"<<endl; } void print(const string& str ) { std::cout<<str<<" "<<count<<endl; } ~howmany() { count--; std::cout<<"destructor:"<<count<<endl; } }; howmany fun(howmany x) { cout<<"beginning of fun"<<endl; x.print("print x in fun"); cout<<"end of x"<<endl; return x; } int main() { howmany h; h.print("int main after build A"); howmany z=fun(h); h.print("int main last line"); }
这段代码执行的显示的内容是:
进行了一次constructor的调用,进行了三次destruction的调用
这样岂不是很矛盾?n次构造对应n次析构啊?
所以结论是编译器进行了两次默认的构造但是没有调用默认构造函数
在main中,
howmany z=fun(h)进行了一次构造,在fun里面也进行了一次构造,这两次构造叫做:拷贝构造
顾名思义就是以拷贝的方式构造一个对象
基础定义
函数原型:T::T(const T & );
默认的拷贝构造函成员数会拷贝每一个成员变量;
待补充
相关文章推荐
- mysql---linux篇
- Linux Mint 18.3 (Sylvia)
- Hadoop集群服务器以及相关硬件选择的一些认识
- OpenGL中各种坐标系的理解
- docker centos7 源码安装MySQL-5.7
- web架构设计经验分享(转)
- memcmp函数实现——string.h库函数
- 成为项目工程需要的高手
- kali下生成web端后门
- Linux下的远程桌面——VncServer
- 维护数列
- OpenCV - Detect skew angle
- shell 基础
- 《apache spark源码剖析》 学习笔记之SparkContext
- 服务器监控Cacti
- linux下shell显示-bash-4.1#不显示路径解决方法
- UDID和openUDID的区别
- 2、OpenSceneGraph中添加节点、删除节点、隐藏节点以及添加开关的用法
- 三层架构
- 这是一个熟悉Linux的心路历程><