将堆栈变量存储在成员向量中是否有效使用向量?

Is storing a stack variable in a member vector valid use of a vector?

实际上,我遇到了一个代码库,并且有一个关于std::vector关于堆栈和堆的问题。

在某个成员函数中我遇到了一些类似这样的代码:

会员声明:

//member variable in DataHelper class
std::vector<Data::Point> mDataPoints;

成员函数:

void DataHelper::LoadData(int nPoints)
{
    //mDataPoints is a member variable
    mDataPoints.reserve(nPoints); 

    for (UINT i = 0; i < nPoints; i++) 
    {
        Data::Point point; //some data class
        point.X = 1; //dummy values
        point.Y = 2;
        point.Z = 3;

        mDataPoints.push_back(point);
    }
}

所以Data::Points被存储在向量中以备后用。

我认为 Data::Point point; 分配在堆栈上,并且在这种意义上它是供以后使用的存储会导致错误。这样对吗?

事实上,当您在 std::vector 中执行 push_pack 时,您复制了数据点。因此,您将有 2 个相同的实例,一个在堆中,另一个在向量中。

如果需要(例如,如果包含指针),您必须确保您的 Data::Point 实现了复制构造函数。