C++ 拷贝构造(二)
2017-07-27 21:55
225 查看
如果在代码中没有提供拷贝构造函数,那么C++会自动建立一个拷贝构造函数。这个默认的拷贝构造函数,不是字节对字节的拷贝,而是成员对成员的拷贝。做成员变量对成员变量的拷贝。
在 A类中,如果成员变量是
同时,C++中对于拷贝构造的优化,当两个拷贝构造在连续时系统会优化为一次拷贝构造。
简单的讲就是:一次拷贝构造之后把构造的对象没有放置,而是直接用做下一个拷贝构造的参数,则这两次的拷贝构造被优化为一次,但得注意:优化时,前一个必须是形参或者临时创建的对象。
比如
优化为:
其实在return的时候,会在栈中生成一个临时变量,其实就相当于:
在 A类中,如果成员变量是
int,则拷贝给
int,如果是
float,则拷给
float,如果是另一个类B b 的成员,则会用B 的拷贝构造去拷贝构造b,如果B类给出的是默认的拷贝构造(系统给的),那么拷贝构造就会递归下去。
同时,C++中对于拷贝构造的优化,当两个拷贝构造在连续时系统会优化为一次拷贝构造。
简单的讲就是:一次拷贝构造之后把构造的对象没有放置,而是直接用做下一个拷贝构造的参数,则这两次的拷贝构造被优化为一次,但得注意:优化时,前一个必须是形参或者临时创建的对象。
比如
A copy_func(char *name){ A a(name); a.print(); return a;//拷贝构造被调用 }
优化为:
A nocopy_func(char *name){ return A(name);//拷贝构造不会被调用
其实在return的时候,会在栈中生成一个临时变量,其实就相当于:
A f(){ A a; return a; } int main() { A t=f(); A @temp = f(); A t= @temp; return 0; }
相关文章推荐
- [读书笔记] 深入探索C++对象模型-第五章-构造、析构、拷贝语义学(上)
- 用汇编的眼光看C++(之class构造、析构) ,(之拷贝、赋值函数)
- C++拷贝构造和赋值构造
- C++中的构造函数与拷贝构造的优化处理
- [C++]异常处理中的拷贝构造操作(copy constructor)
- c++是如何处理 对象 作为返回值 和 输入参数的 -- 拷贝构造
- C++【拷贝构造】和【拷贝赋值】(实现自定义的string类)
- C++:析构函数、对象生命周期、类型转换构造、拷贝构造、拷贝赋值、深浅拷贝
- C++拷贝构造的优化
- C++:复数类构造函数、拷贝构造、运算符重载、析构函数
- C++中的拷贝构造,赋值和移动构造
- C++拷贝构造的优化
- C++拷贝构造
- [读书笔记] 深入探索C++对象模型-第五章-构造、析构、拷贝语义学(中)
- C++基础3 类:构造 拷贝 析构函数 静态变量函数 const初始化列表 new delete this 面向对象模型
- 【C++对象模型】第五章 构造、解构、拷贝 语意学
- 《inside the c++ object model》读书笔记 之五 构造,解构,拷贝语意学
- C++中拷贝构造、赋值构造的区别
- 深度探索C++对象模型 第五章 构造、析构、拷贝语意学
- C++【面试题】:类实现万年历(日期计算器),(含构造函数、拷贝构造、运算符重载、析构函数)