0

私のクラス VecXd example -> VecXd x,y,z; を呼び出すときに、テンプレートと一緒にメインでベクトルを追加するプロジェクトに取り組んでいます。返される値は正しいですが、VecXd x,y,z; を使用してメインから再度呼び出すと、私の operator= が返す値は範囲外になりますが、その理由は誰にも分かりますか?

template< class V >
class VecXd {
  std::size_t dimension;
  V* vecArr;
public:
  ...
  VecXd& operator=(const VecXd &rhs)
  { 
     // cout << rhs.vecArr[0] << "-= value at 0 rhs" << endl; value is fine
     dimension = rhs.dimension;   
     cout << dimension << "operator= dimension test!" << endl; ///dimension check
     vecArr = new V[dimension];

     for(int i = 0; i < rhs.dimension; i++)
     {
        vecArr[i] = rhs.vecArr[i];
        cout << vecArr[i] << " our new value (op=)" << endl;                 
     } 

     return *this;    
   }
};
4

1 に答える 1

1

vecArr以前に割り当てられたメモリを解放する前に、新しく割り当てられたメモリに割り当てることで、メモリ リークが発生しています。

それ以外では、コードの正確性は、ここで提供されていない部分、特に と の正しい保守にかかっていvecArrますdimension

std::vectorまたはを使用しないのはなぜstd::arrayですか? 多くの場合、次元数はコンパイル時に判明し、固定されています。次に、使用するstd::arrayのが理想的です。たとえば、ベクトル和や内積などのさらなるメソッドによって、(パブリック継承によって、またはデータメンバーとして持つことによって) それを拡張できます。

于 2013-09-19T14:16:06.227 に答える