C++ 构造函数,赋值构造函数,析构函数,赋值构造函数的调用次序
2015-06-19 11:02
363 查看
一、如果参数是被优化之后出入的也就是,没有经过复制构造函数,那么最后会将其当做这个函数的一个内部的局部变量。举个例子
Class A{}
fun(int i,A a){
return 1+a;//这里不会调用赋值构造函数,因为是匿名对象
}
fun(1,A())//A()传入时不会调用复制构造函数,因为是你们对象
调用为:
constructor A;
constructor (A+1);
deconstructor A;
deconstructor (A+1);
二、如果没有进行优化会将参数作为一个外部的变量的引用,如果返回值是一个匿名对象,那么这个参数的析构会晚于这个匿名对象
fun(1+A(),2)
调用为:
constructor A;
constructor (A+1);//这里的(A+1)有点类似一中的A,因为实际上两者都是匿名对象
constructor (A+1)+2;
deconstructor (A+1);
deconstructor (A+1)+2;
deconstructor A;
三、函数内部的变量的析构次序,和声明的次序是对称的。
首先生命的最后析构
void fun(){
A a=A(2, 2);
A b=A(2, 3);
}
调用为:
constructor a;//这里的(A+1)有点类似一中的A,因为实际上两者都是匿名对象
constructor b;
deconstructor b;
deconstructor a;
Class A{}
fun(int i,A a){
return 1+a;//这里不会调用赋值构造函数,因为是匿名对象
}
fun(1,A())//A()传入时不会调用复制构造函数,因为是你们对象
调用为:
constructor A;
constructor (A+1);
deconstructor A;
deconstructor (A+1);
二、如果没有进行优化会将参数作为一个外部的变量的引用,如果返回值是一个匿名对象,那么这个参数的析构会晚于这个匿名对象
fun(1+A(),2)
调用为:
constructor A;
constructor (A+1);//这里的(A+1)有点类似一中的A,因为实际上两者都是匿名对象
constructor (A+1)+2;
deconstructor (A+1);
deconstructor (A+1)+2;
deconstructor A;
三、函数内部的变量的析构次序,和声明的次序是对称的。
首先生命的最后析构
void fun(){
A a=A(2, 2);
A b=A(2, 3);
}
调用为:
constructor a;//这里的(A+1)有点类似一中的A,因为实际上两者都是匿名对象
constructor b;
deconstructor b;
deconstructor a;
相关文章推荐
- Effective C++条款1
- 6.824 Lab4: Cache Locks回顾
- C++类使用构造函数初始化类表和构造函数函数体中赋值的区别
- 如何成为一个牛逼的C/C++程序员?
- Voronoi图简介及C语言实现
- C/C++程序员必须熟练应用的开源项目
- 游戏引擎开发之音乐播放(一)
- C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- LeetCode 201. Bitwise AND of Numbers Range
- C++构造函数public,protected,private
- 几种C++ std::string和std::wstring相互转换的转换方法
- c++:变量,数组和指针
- c++求数组中的最小(大)的n位数
- 设计模式----------------简单工厂模式
- Effective C++ 条款1
- c++函数必须先声明在使用
- c++命名空间使用
- Ubuntu下 vi编写第一个C语言程序
- 别被技术绑架
- 别被技术绑架