【发布时间】:2022-12-10 22:19:18
【问题描述】:
我有一个函数可以创建一个向量,用它做一些事情然后将它作为一个返回右值使用std::move。
当我将它分配给一个变量时,我期望调用std::vector的移动构造函数std::vector::vector(vector&&)。
但是我遇到了分段错误。
这是我的代码:
#include <iostream>
#include <vector>
std::vector<int>&& getVector(int start)
{
auto result = std::vector<int>();
result.reserve(10);
for (int i = start; i < start + 10; i++)
result.push_back(i);
return std::move(result);
}
int main()
{
std::cout << "Did I break here 1" << std::endl;
auto vec = getVector(10);
std::cout << "Did I break here 2" << std::endl;
}
它给了我
Did I break here 1
[1] 55419 segmentation fault <executable_file>
我只是猜测移动构造函数或右值有问题。顺便说一句,我返回一个右值来不复制向量的值并窃取指向它的指针。
【问题讨论】:
-
我不明白你打算如何让它工作,或者你打算如何让调用代码工作。为什么不按价值回报呢?
-
按值返回它会在调用者的范围内构造另一个向量并复制数据,对吗?
-
@JasonLiam 我使用
-Wall -Wextra -Wpedantic和 clang++。它不是引用,因为它是右值 -
@Sisyffe 看到 gcc 给出警告 here
标签: c++ c++11 vector segmentation-fault