【发布时间】:2013-10-16 02:47:51
【问题描述】:
我知道有类似的问题,但他们都没有对我的问题给出明确的答案......
就最佳实践而言,这两种方法都可以吗?或者我应该返回一个指针? 如果不是,应该如何更改它们以遵循最佳实践。
我想从函数返回对新对象的引用。我的实现如下:
MyClass& doSomething() {
return *(new MyClass());
}
MyClass a = doSomething();
这可以吗,因为 MyClass 的新实例正在用 new 分配在堆上?
或者我应该让它保持不变(我不确定什么时候这样做)?
const MyClass& doSomething() {
return *(new MyClass());
}
如果这两个都错了,我应该只返回一个指向新对象的指针吗?
谢谢。
【问题讨论】:
-
不需要 const,第一个选项很好。此外,如果需要,您也可以返回一个指针。由你决定。
-
但是引用不是由调用者分配的。它是在调用过程中实例化的。因此我认为如果您不使用 new 那么它将超出范围,因为它将位于堆栈而不是堆上。
-
@BrianCain 他绝对需要
new,否则对象将在doSomething()完成后立即销毁。 -
@SergeSeredenko,受伤了,对不起。