gpt4 book ai didi

c++ - 在 C++ 中通过引用返回

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:15 25 4
gpt4 key购买 nike

我知道如果引用的变量也通过引用传递给函数,那么通过引用返回是可以的。例如:

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

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

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

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

最佳答案

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

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++ 中,您应该简单地按值返回 vector 并让移动语义和/或 (Named) Return Value Optimisation做它的工作:

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>());
}

关于c++ - 在 C++ 中通过引用返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26391146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com