c++ vector neuen löschen
Wie kann ich freien Speicher im nächsten Beispiel.
vt.pop_back() löscht element in der vt, aber es ist nicht der freie Speicher.
löschen vt[i] nicht funktioniert, und es mir "segmentation fault".
#include <vector>
#include <unistd.h>
using namespace std;
const int SIZE = 1000000;
class Test
{
public:
Test();
~Test();
private:
int *arr;
};
int main()
{
vector<Test *> vt;
for(int i = 0; i < 100; i++)
vt.push_back(new Test());
sleep(10);
return 0;
}
Test::Test()
{
arr = new int[SIZE];
}
Test::~Test()
{
delete[] arr;
}
- Warum auch du mit neues?
- Warum
delete v[i]
funktioniert nicht? Es gibt keinedelete v[i]
in diesem code. - da der Konstruktor kann Argumente bestehen
- Sie können
vector
fürarr
zu. - Ich würde nicht empfehlen, dies zu tun. Wenn man einen Vektor von Zeigern, versucht zu kopieren, der Vektor wird nicht tun, was Sie erwarten, pops wird gelöscht, und es wird in der Regel führt zu Schmerzen und leiden, wie Sie wickeln jedes vector-Betrieb machen ihn tun die Rechte Sache mit den Pointern und Speicher. Erhöhung der ptr_vector wäre ein Beispiel für eine viel bessere Möglichkeit, dies zu tun.
- mögliche Duplikate von Tut vector::erase() zerstören das entfernte Objekt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie nicht die Speicherung von "Test" Objekte, die Sie speichern Zeiger auf diese Objekte. So löschen bringt nichts, aber löschen der Zeiger.
Wenn Sie möchten, dass Ihre Objekte werden gespeichert in dem Vektor sollte die Art
Diese Weise die delete-Aufrufe ausführen, tatsächlich das Destruktor der Objekte.
Ist der resultierende code wird:
Als kommentierte dies erfordert auch ein neues copy-Konstruktor:
Test
Klasse bricht in der in der Regel aus Drei und kann nicht sicher kopiert.push_back
Kopien ein temporäres Objekt in dem Vektor, und zerstört das original, das löschen des array zugewiesen.Können Sie
delete vt[i]
wie dieser, ist es den Speicher frei zugeordnetTest
Objekte:Den Sie speichern Zeiger und nicht die Objekte, dafür ist der "pointer-Objekt" wird zerstört, wenn Sie zerstören Ihre Vektor, aber nicht das Objekt der Zeiger zeigt
Wenn Sie wollen, um das löschen von bestimmten Elementen, Sie könnten versuchen, mit der Funktion
erase
vonstd::vector
.