读书人

C++语言求解惑解决方法

发布时间: 2013-10-21 17:02:52 作者: rapoo

C++语言求解惑


当时const Re* pU = &(bound(*PGO));的时候,结果如图C++语言求解惑解决方法
是指针的情况下,Re对象为啥会被提前释放
[解决办法]
你在Re里面重载一下面向地址的赋值运算符看看
[解决办法]
$ g++ a.cpp
a.cpp: 在函数‘int main()’中:
a.cpp:30:34: 错误:取临时变量的地址 [-fpermissive]


你这个g++里编译都通不过,然后
const Re bound(const UI& obj)你这个函数返回的是一个临时对象,返回的不是引用。
按你意思我觉得const Re& bound(const UI& obj)这个才是你本意吧?
[解决办法]
引用:
Quote: 引用:

$ g++ a.cpp
a.cpp: 在函数‘int main()’中:
a.cpp:30:34: 错误:取临时变量的地址 [-fpermissive]


你这个g++里编译都通不过,然后
const Re bound(const UI& obj)你这个函数返回的是一个临时对象,返回的不是引用。
按你意思我觉得const Re& bound(const UI& obj)这个才是你本意吧?
别追究我的本意,我现在是好奇目前这种现象,想解惑,不要扯远了

我的楼层给你的就是答案啊
const Re bound(const UI& obj)你这个函数返回的是一个临时对象,返回的不是引用。

返回完跑出作用域临时对象就释放了啊。
[解决办法]
const Re pU = bound(*PGO);其实是两次拷贝构造,只是编译器优化,所以只有一次
1.return=bound(*PGO),return是临时变量,会在该语句执行完成后释放(编译器应该是把这次优化了)
2.const Re pU=return,pU是函数局部变量,会在函数块执行完成后释放

const Re* pU = &(bound(*PGO));只有一次拷贝
1.return=bound(*PGO),return是临时变量,会在该语句执行完成后释放
2.const Re* pU = &return,只是获取变量的地址,不拷贝,但是这里的指针所指的是临时变量,所以是不能使用的
[解决办法]
临时变量,不使用时,编译器可以立即释放。
指针,引用,引用临时变量,不算使用。函数调用,表达式才算使用。

读书人网 >C++

热点推荐