填充向量与返回空向量的对象

时间:2015-07-25 01:17:43

标签: c++ oop vector

我有一个成员函数,用对象填充向量:

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循环什么都不做。这怎么可能?

编辑:玩了一段时间的代码后,我注意到问题是通过引用返回。但为什么通过引用返回导致此问题?

1 个答案:

答案 0 :(得分:4)

您正在返回本地变量的引用,这就是问题所在。局部变量optData的范围仅在函数内部,一旦到达函数的最后一个括号,系统将调用它的析构函数。

因此,需要进行修正以将其更改为按值返回,并且NRVO将在其余部分进行处理。所以改变你的功能如下

std::vector<OptionData> OptionData::createMeshExpiry(const double T_start, const double T_end, double T_increment)
{
 //....
}