您的位置:首页 > 编程语言 > C语言/C++

C++返回对象和引用的区别

2017-01-10 13:05 253 查看
#include "stdafx.h"

#include <string.h>

class A

{

public:
A()
{
printf("A() \n");
strcpy_s(buf, sizeof(buf), "abc123");
}
~A()
{
printf("~A() \n");
//strcpy_s(buf, sizeof(buf), "");
}
void p()
{
printf("%s \n", buf);
}
char buf[7];

};

A Test1()

{
A a;
return a;

}

A& Test2()

{
A a;
return a;

}

// 一句话,返回的对象怎么处理归调用者处理

// 正常

void test1()

{
A a1 = Test1();
a1.p();

}

// 虽然是引用,栈空间会开的大些,而保存临时对象,并在函数结束的时候析构

void test2()

{
A &a1 = Test1();
a1.p();

}

// 返回一个无效的指针 出现乱码

void test3()

{
A &a1 = Test2();
a1.p();

}

// 返回的对象,虽然已经析构了,但是废弃的内存依然是有效数据,并把数据没有破坏前复制到调用者堆栈中

void test4()

{
A a1 = Test2();
a1.p();

}

int _tmain(int argc, _TCHAR* argv[])

{
test3();
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言