最佳答案
我知道这个标题听起来很熟悉,因为有很多类似的问题,但是我要问的是这个问题的不同方面(我知道在堆栈中放置东西和将它们放在堆中之间的区别)。
在 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;
,它看起来不太好。我不想返回一个复制的值,因为它是低效的(我认为) ,所以问题来了