1

コードで、(ヒープではなく) スタックでベクトルを宣言し、「set」関数を使用して別のクラスのメンバー変数をこのベクトルに設定していることに気付きました。唯一の問題は、関数 (myFunction) を終了した後、ベクターを破棄する必要があり (スタック上にあるため)、このベクターへの参照が「意味がない」ことを指す必要があることです。しかし、私のコードは正しく機能しているので、その理由を自問していました。ベクトルがあったメモリの部分は、今まで誰も削除しなかったために存在しているので、幸運でしょうか? 私のコードがクラッシュしないのは運の問題ですか?コードは次のとおりです。

void myFunction() {
   std::vector<std::vector<double>> vDoubleVector = MyUtils::CreateDoubleVector(); //Creates a
   double vector (but not on heap)

   MyClass mC;
   mC.SetDoubleVector(vDoubleVector);
}

class MyClass {
   std::vector<std::vector<double>> mDoubleVector;
   void SetDoubleVector(std::vector<std::vector<double>>& aDoubleVector) {
     mDoubleVector = aDoubleVector;
   }
}
4

2 に答える 2

3

Luchianは私よりも速かったので、このコードに賢明な改善を追加します。

void SetDoubleVector(std::vector<std::vector<double>> aDoubleVector) {
     mDoubleVector = std::move(aDoubleVector);
   }

「経験則」を引用する-コピーする必要がある場合は、インターフェースで行います。

//編集して回答を完成させます。

あなたのコードは、 inを使用してベクトルをコピーしました。operator=SetDoubleVector

于 2012-09-25T09:57:42.677 に答える
3

への参照はありません。vectorクラスにはそのコピーがあります。

于 2012-09-25T09:52:52.640 に答える