引言
c++函数返回值,如int, char, float等内建类型可以使用寄存器返回。但是如果我返回了自定义的一个类呢?那么函数返回时当前栈帧释放了,如果保存返回对象的值。它又在什么时候初始化? 让我们从汇编层次来看问题。
代码
编写测试代码如下,非常简单的一个例子。测试平台为i386。
#include <stdio.h>
#include <stdint.h>
#include <string>
#define trace(fmt, ...) printf("[trace] %s:%s:%d " fmt, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
class CPackage
{
public:
CPackage(){}
CPackage(const CPackage &pkg)
{
m_data = pkg.m_data;
m_datalen = pkg.m_datalen;
}
const char *data(size_t &len)
{
len = m_datalen;
return m_data;
}
private:
char *m_data;
uint32_t m_datalen;
};
CPackage create_package()
{
CPackage package;
return package;
}
int main(int argc, char *argv[])
{
CPackage package = create_package();
size_t datalen = 0x00;
const char *data = package.data(datalen);
trace("package date %p, len %#X\n",