请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问老师关于拷贝构造的问题

图片描述
请问老师,如图里面,我自己写了个Test类,以及一个 test_func 的函数,这个函数返回一个 Test 类。
在main函数中让一个 Test ty 接收函数返回值。按照我的理解 test_func 中 return 的那个 t 应该在函数执行完的时候就被释放了,所以 main 函数中第37行那里应该会触发拷贝构造呀,但是执行的时候发现并没有触发。
编译选项确认了一下并没有开启什么优化:
图片描述

然后还有个问题是:
图片描述
我给 test_func 这个函数的返回值加了个引用,按我理解返回引用的话应该不会触发拷贝构造了,但是这触发了,并且拷贝构造中拿到的 string 值是一堆乱码,所以有点不明白,是因为 test_func 中的 str 在 test_func 执行完毕的时候被释放的原因么?
谢谢老师~

正在回答 回答被采纳积分+3

1回答

quickzhao 2020-06-10 13:47:55

这里返回引用是危险的,对象的生存周期已过,内容是未定义的。拷贝构造没有调用你试试其他编译器看看,我不清楚你的编译器是什么,你最后的赋值是在哪里完成的。

0 回复 有任何疑惑可以回复我~
  • 提问者 Osuribaba #1
    请问老师业务中函数return一个对象的最好方式是啥呀?
    回复 有任何疑惑可以回复我~ 2020-06-10 20:43:44
  • quickzhao 回复 提问者 Osuribaba #2
    可以返回引用,前提是保证它的作用域仍然有效。
    回复 有任何疑惑可以回复我~ 2020-06-10 21:07:24
  • 提问者 Osuribaba 回复 quickzhao #3
    请问老师能否举个例子,什么情况下引用的作用域是有效的呀?
    回复 有任何疑惑可以回复我~ 2020-06-10 21:10:32
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号