标签:style blog color os io 问题 ar 代码
1 /**********************************************/ 2 class CStudent; 3 CStudent GetStudent() 4 { 5 CStudent loc_stu; 6 return loc_stu; 7 } 8 9 int main() 10 { 11 CStudent stu = GetStudent(); 12 } 13 /**********************************************/
来看一下main函数中调用GetStudent()的汇编实现:
看上去,GetStudent()是无参函数,可是为什么在call之前push了一个参数到堆栈里呢?并且call完之后还add esp, 4来使堆栈平衡。
这个调用是这么实现的:/***************************************************************************/ int main() { //CStudent stu = GetStudent(); 原来的写法 CStudent stu; stu = GetStudent(); } /***************************************************************************/
/***************************************************************************/ class Array { public: Array(int l) //构造函数 { pData = new int[l]; len = l; } ~Array() //析构函数 { delete pData; len = 0; } Array(const Array& other) //拷贝构造函数 { pData = new int[other.len]; memcpy(pData, other.pData, other.len); len = other.len; } Array& operator=(const Array& other) //赋值操作符 { pData = new int[other.len]; memcpy(pData, other.pData, other.len); len = other.len; return *this; } private: int* pData; int len; }; /***************************************************************************/
/***************************************************************************/ class Array { public: Array(int l); //构造函数 ~Array(); //析构函数 Array(const Array& other); //拷贝构造函数 Array& operator=(const Array& other); //赋值操作符 Array(Array&& other) //转移构造函数 { pData = other.pData; len = other.len; /*将资源转移过来,避免资源拷贝*/ other.pData = NULL; other.len = 0; } Array& operator=(Array&& other) //转移赋值操作符 { pData = other.pData; len = other.len; /*将资源转移过来,避免资源拷贝*/ other.pData = NULL; other.len = 0; return *this; } private: int* pData; int len; }; Arrar GetArray() { Array loc_num(10); /*some operation*/ return loc_num; } int main() { Array num(10); num = GetArray(); } /***************************************************************************/
C++11系列之——临时对象分析,布布扣,bubuko.com
标签:style blog color os io 问题 ar 代码
原文地址:http://www.cnblogs.com/xuanyuan/p/3888779.html