c++ 结构体生命周期的问题
typedef struct {
double x, y;
} POINT;
POINT mkpoint1(double x, double y) {
POINT temp;
temp.x = x;
temp.y = y;
return temp;
}
c++不是很注重生命周期的管理吗?temp作为局部变量,返回的时候为什么没有报错?难道temp不是放在堆栈中的?
POINT * mkpoint2(POINT * point2) {
POINT * temp2;
temp2->x = point2->x;
temp2->y = point2->y;
return temp2;
}
temp2也是局部变量啊,为什么也可以呢?
再不行我要去反汇编了!大家给解释下
[解决办法]
编译的时候可通过,不一定代码运行时不出错
[解决办法]
返回就是拷贝一份,第一个是拷贝一份对象,第二个是拷贝一份指针(也就是地址值)。
要照你原来的想法,局部变成不能直接返到外边的话,那以下代码也不行了:
int f() { int i = 5; return i;}
[解决办法]
另外你的第二个程序是错的。
[解决办法]
顶楼上
第一个没错,拷贝了一份
第二个可以编译通过,但运行肯定会出错,temp2是无效的指针,会被初始化为随机值,指向一个没有分配过的内存地址...
[解决办法]
当返回值是基本数据类型, 类,结构体时,返回的时一份新的拷贝.你可能通过观察temp地址和返回后的POINT的地址,你就知道了.跟返回int这类的基本类型是一样的道理.
[解决办法]