我有一个成员函数,用对象填充向量:
std::vector<OptionData>& OptionData::createMeshExpiry(const double T_start, const double T_end, double T_increment)
{ // Ouput a vector filled with option data spread
std::vector<OptionData> optData;
m_T = T_start; // intialize to first value
while(m_T <= T_end)
{
optData.push_back(*this); // push the current instance onto the vector
m_T += T_increment; // increment expiry time
}
return optData; // return by reference to enable a cascading effect (if needed to change more than one var)
}
无论while循环运行多少次,该函数始终返回一个空向量。这意味着我的while循环什么都不做。这怎么可能?
编辑:玩了一段时间的代码后,我注意到问题是通过引用返回。但为什么通过引用返回导致此问题?
答案 0 :(得分:4)
您正在返回本地变量的引用,这就是问题所在。局部变量optData
的范围仅在函数内部,一旦到达函数的最后一个括号,系统将调用它的析构函数。
因此,需要进行修正以将其更改为按值返回,并且NRVO将在其余部分进行处理。所以改变你的功能如下
std::vector<OptionData> OptionData::createMeshExpiry(const double T_start, const double T_end, double T_increment)
{
//....
}