我应该如何正确地将一个向量从一个函数返回到一个无效的额外复制?
如果我只返回向量,那么我应该在函数中创建一个向量,然后在返回时将其复制到结果中。但我想避免这种情况。然后我想我应该在堆上创建向量并返回一个指向它的指针 vector* ?
谢谢
我应该如何正确地将一个向量从一个函数返回到一个无效的额外复制?
如果我只返回向量,那么我应该在函数中创建一个向量,然后在返回时将其复制到结果中。但我想避免这种情况。然后我想我应该在堆上创建向量并返回一个指向它的指针 vector* ?
谢谢
C++ 标准允许您的编译器在某些情况下消除此副本(第 12.8.5 节)。很难判断你的编译器是否真的这样做了,所以你应该阅读它的文档或查看生成的汇编代码。所以最好让你的编译器为你做优化。
但是,如果您真的喜欢手动优化(您不应该),请继续阅读。
在堆上分配向量并返回指向它的指针是一件坏事,因为在这种情况下,不清楚谁负责这个对象以及谁将进行内存清理。
让你的函数接受一个额外的参数——引用或指向要存储结果的向量的指针——会更好。
我会将对它的引用作为参数传递。
void foo(std::vector& bas)
{
// do code here
}