私が理解しているところでは、new
という単語を使用するたびに、メモリリークを避けるためにdelete
を使用する必要があります。私の例では、push_back()
に、new
を使用して、私のベクトルに動的メモリを再割り当てします。私は、いつも私がpush_back()
を使う度に、私はメモリの新しい部分を割り当てて、delete
が古いとは思っていません。もし私が正しいのであれば誰かが私のことを説明できるのですか?もし私が間違っていたら、私の理由を説明してください。カスタムベクタークラスでの動的メモリ再割り当て
class Vector {
double* ptr;
size_t size;
size_t max_size;
public:
Vector(): size{0}, max_size{1} {
ptr = new double(max_size);
}
~Vector(){
delete pointer;
}
void push_back(const double elem) {
if (size+1 == max_size) {
double* buf_ptr = ptr;
max_size*=2;
ptr = new double(max_size);
}
ptr[size] = elem;
size+=1;
}
};
'new double(max_size)'は配列を割り当てないので、 'max_size'という値を持つ単一のdoubleを割り当てます。配列を割り当てるには: 'new double [max_size]'。そしてその配列を解放する: 'delete []'ではなく 'delete'。 – emlai