如何在C+中“返回一个对象”?我知道标题听起来很熟悉,因为有很多类似的问题,但是我要求问题的另一个方面(我知道堆栈上的东西和堆中的东西之间的区别)。在Java中,我总是可以返回对“本地”对象的引用public Thing calculateThing() {
Thing thing = new Thing();
// do calculations and modify thing
return thing;}在C+中,为了做类似的事情,我有两个选项(1)每当需要“返回”对象时,我都可以使用引用void calculateThing(Thing& thing) {
// do calculations and modify thing}然后像这样使用它Thing thing;calculateThing(thing);(2)或者我可以返回指向动态分配对象的指针Thing* calculateThing() {
Thing* thing(new Thing());
// do calculations and modify thing
return thing;}然后像这样使用它Thing* thing = calculateThing();delete thing;使用第一种方法,我不必手动释放内存,但对我来说,这会使代码难以阅读。第二种方法的问题是,我必须记住delete thing;看起来不太好。我不想返回复制的值,因为它效率很低(我认为),下面是问题是否有第三种解决方案(不需要复制值)?如果我坚持第一个解决方案,有什么问题吗?何时以及为什么要使用第二个解决方案?
3 回答
翻过高山走不出你
TA贡献1875条经验 获得超3个赞
我不想返回复制的值,因为它效率低下
料青山看我应如是
TA贡献1772条经验 获得超8个赞
Thing calculateThing() { Thing thing; // do calculations and modify thing return thing;}
当年话下
TA贡献1890条经验 获得超9个赞
Thing calculateThing() { Thing thing(); // do calculations and modify thing return thing;}
Thing(const Thing& aThing) {}
更新
- 3 回答
- 0 关注
- 526 浏览
添加回答
举报
0/150
提交
取消