通过引用返回C ++

用户名

我知道,如果引用的变量也通过引用传递到函数中,也可以按引用返回。例如:

int& foo(int& bar)
{
    bar++;
    return bar;
}

但是,我想知道是否可以返回通过引用函数中通过new关键字创建的对象我尝试了类似以下的操作,但是出现了编译器错误:

vector<int>& baz()
{
    return new vector<int>();
}

有没有一种方法可以通过有意义的引用返回新向量,还是仅返回一个指针更好?

Angew不再为SO感到骄傲

从技术上讲,您当然可以通过引用返回动态分配的对象:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++中通过引用返回值

来自分类Dev

在C ++中通过引用返回堆块

来自分类Dev

在C ++中通过引用返回值

来自分类Dev

C ++通过引用返回有什么作用?

来自分类Dev

在 C++ 中通过引用返回结果

来自分类Dev

JavaScript通过引用返回

来自分类Dev

在C中通过引用返回并传递文件描述符

来自分类Dev

如何在C ++中通过引用返回向量

来自分类Dev

通过引用在本地创建的C ++问题返回对象

来自分类Dev

在 C#3.5 中通过引用返回数组

来自分类Dev

通过引用返回vector <string>

来自分类Dev

通过引用返回增加的变量

来自分类Dev

如何通过自动返回类型返回引用?

来自分类Dev

如何通过自动返回类型返回引用?

来自分类Dev

通过类函数返回引用并在c ++中返回整个对象?

来自分类Dev

C ++返回对象的引用

来自分类Dev

C ++通过引用问题

来自分类Dev

通过值将向量返回给引用

来自分类Dev

如何通过引用返回切片?

来自分类Dev

通过右值引用返回lambda?

来自分类Dev

返回通过引用传递的参数是否安全?

来自分类Dev

通过使用引用返回静态字符数组

来自分类Dev

通过引用返回向量元素

来自分类Dev

说明通过函数从引用返回数组的语法

来自分类Dev

通过函数引用返回Eigen :: VectorXd

来自分类Dev

返回向量或通过引用传递

来自分类Dev

突变体通过引用返回

来自分类Dev

无法通过引用传递从函数返回的指针

来自分类Dev

通过将返回值绑定到const引用来提高C ++性能