Я создал вектор, выделив его память в кучу. Затем я создаю 10 строковых объектов, также выделенных для памяти кучи и сохраняя их внутри вектора. Я попытался освободить эту память, связанную с каждым новым строковым объектом, используя оператор delete
, но я не знаю, как это сделать. Я использую C++ 11.Освобождение памяти, выделенной куче, хранящейся внутри вектора
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int main()
{
vector<string> *v = new vector<string>;
for(int i = 0; i < 10; i++) {
// allocate a new string object on the heap
string *a = new string("Hello World");
//de-reference the string object
v->push_back(*a);
}
// show the contents of the vector
for(auto i = v->begin(); i != v->end(); ++i) {
// okay so this makes a lot more sense than:
// const string &s = *i;
// this way we create a pointer to a string object
// it is a lot more clear this way
const string *s = &(*i);
cout << *s << " " << s->length() << endl;
}
cout << endl << endl;
for(vector<string>::iterator it = v->begin(); it != v->end(); ++it) {
delete ⁢
v->erase(it);
}
for(auto i = v->begin(); i != v->end(); ++i) {
cout << *i << endl;
}
cout << endl << "Size: " << v->size() << endl;
delete v;
}
g++ -std=c++11 main.cc -o main
Моя ошибка в том, что не все объекты удаляются. В итоге у меня осталось 5 объектов, оставшихся после последнего 4-го утверждения. Когда эти операции выполняются, я ожидаю, что в векторе будут нулевые объекты.
Мой выход:
Hello World 11
Hello World 11
Hello World 11
Hello World 11
Hello World 11
Hello World 11
Hello World 11
Hello World 11
Hello World 11
Hello World 11
Hello World
Hello World
Hello World
Hello World
Hello World
Size: 5
Проблема заключается в том, что не все объекты удаляются.
Почему вы выделяете вектор динамически? Для этого нет оснований. Вам вообще не нужно выполнять ручное управление памятью. – juanchopanza
Это для образовательных целей. То, что я делаю, бесполезно, за исключением того, что я участвую. –
Просто удалите все указатели и все ваши новости, и он будет работать так, как вы этого хотите. – IdeaHat