我知道,如果引用的变量也通过引用传递到函数中,也可以按引用返回。例如:
int& foo(int& bar)
{
bar++;
return bar;
}
但是,我想知道是否可以返回通过引用在函数中通过new
关键字创建的对象。我尝试了类似以下的操作,但是出现了编译器错误:
vector<int>& baz()
{
return new vector<int>();
}
有没有一种方法可以通过有意义的引用返回新向量,还是仅返回一个指针更好?
从技术上讲,您当然可以通过引用返回动态分配的对象:
vector<int>& baz()
{
return *new vector<int>();
}
请注意*
用于取消引用由返回的指针new
。
这样做是否明智,完全是另一回事。它是内存泄漏的主要候选者。如果执行此操作,则调用者负责调用delete
返回的对象,否则该对象将被泄漏。请注意,在以下两种情况下,都可能很容易发生这种情况:
std::vector<int> v1 = baz(); // leak!
auto v2 = baz(); // leak!, auto doesn't deduce references
在现代C ++中,您应该简单地按值返回向量,并移动语义和/或(命名)返回值优化来完成其工作:
std::vector<int> baz()
{
return std::vector<int>();
}
如果出于某种原因需要动态分配,则至少应返回一个合适的智能指针,以确保不会发生内存泄漏:
std::unique_ptr<std::vector<int>> baz()
{
return std::unique_ptr<std::vector<int>>(new std::vector<int>());
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句