我的理解,每当我使用单词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;
}
};
答案 0 :(得分:1)
三件事:
new double[maxsize]
(分配双打数组),而不是new double(maxsize)
(分配单个双倍值)std::copy
),或者您将旧数据丢弃在地板上delete[] buf_ptr
释放旧阵列的内存所有这一切都可以通过替换这一行来解决:
ptr = new double(max_size);
这些行:
ptr = new double[max_size];
std::copy(buf_ptr, buf_ptr + size, ptr);
delete[] buf_ptr;
确保在源文件顶部#include <algorithm>
new
。
注意:您需要调整构造函数和析构函数,分别使用基于匹配数组的delete
和{{1}}形式。