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

来源:8-5 拷贝构造及临时对象的优化

Osuribaba

2020-06-09

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

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

写回答

1回答

quickzhao

2020-06-10

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

0
4
quickzhao
回复
Osuribaba
这太多了,这里不在函数内部创建的对象一般都可以。关于对象返回值之前应该有同学问过,你找找提问区,我应该回答过。
2020-06-10
共4条回复

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程