cls*_*udt 3 c++ return reference return-type
C++引用仍然让我感到困惑.假设我有一个函数/方法,它创建一个类型的对象Foo并通过引用返回它.(我假设如果我想返回对象,它不能是在堆栈上分配的局部变量,所以我必须在堆上分配它new):
Foo& makeFoo() {
...
Foo* f = new Foo;
...
return *f;
}
Run Code Online (Sandbox Code Playgroud)
当我想存储在另一个函数的局部变量中创建的对象时,该类型应该是 Foo
void useFoo() {
Foo f = makeFoo();
f.doSomething();
}
Run Code Online (Sandbox Code Playgroud)
还是Foo&?
void useFoo() {
Foo& f = makeFoo();
f.doSomething();
}
Run Code Online (Sandbox Code Playgroud)
由于两者都是正确的语法:两个变体之间是否存在显着差异?
是的,第一个将复制返回的引用,而第二个将引用返回的引用makeFoo.
请注意,使用第一个版本将导致内存泄漏(最有可能),除非您在复制构造函数中做了一些黑暗魔法.
好吧,除非你打电话,否则第二个也会导致泄漏delete &f;.
底线:不要.只需跟随人群并按价值返回.或智能指针.