将堆栈变量存储在成员向量中是否有效使用向量?
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
实现了复制构造函数。
实际上,我遇到了一个代码库,并且有一个关于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
实现了复制构造函数。