2016-03-22 5 views
-1

実際には、コードベースに直面しており、スタックとヒープに関するstd::vectorに関する質問があります。メンバー変数にスタック変数を格納するのは、有効なベクトルの使用ですか?

メンバ宣言:

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

メンバ関数:だからData::Pointsのためのベクターに格納されている

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::Point point;がスタックに割り当てられていると思いますし、後でこの意味で使用するための記憶域はエラーにつながると思います。これは正しいですか?

答えて

1

実際、std::vectorpush_packを実行すると、データポイントがコピーされます。したがって、2つの同一のインスタンスがあります.1つはヒープに、もう1つはベクトルにあります。

Data::Pointは、必要に応じて(たとえば、ポインタを含む場合など)コピーコンストラクタを実装する必要があります。

+0

ああ、私はコピーコンストラクタ/ポインタの頭に感謝しています! – Stefan

関連する問題