Wie im Titel erwähnt, wie Sie den Speicher löschen, der nach dem Löschen eines Elements aus Array zugewiesen wurde. Hier ist mein Code:Entfernen Sie ein Element aus dem Array und den ihm zugewiesenen freien Speicher
// VectorGraphic.h
#include "GraphicElement.h"
#include <string>
#ifndef VECTOR_GRAPHIC_H
#define VECTOR_GRAPHIC_H
class VectorGraphic
{
unsigned int numGraphicElements;
GraphicElement* pElements;
public:
VectorGraphic(){
numGraphicElements = 0;
//pElements = new GraphicElement();
pElements = new GraphicElement[sizeof(GraphicElement)+1];
}
~VectorGraphic()
{
if (pElements){
delete[]pElements;
//pElements = NULL;
}
}
void DeleteGraphicElement(){
cout << "Deleting a Graphic Element" << endl;
cout << "Please enter the index of the Graphic Element you wish to delete" << endl;
int index;
cin >> index;
if (index > numGraphicElements){
cout << "Element is not found at specified index";
return;
}
else{
for (int i = 0; i < numGraphicElements; i++){
if (i == index){
for (int j = i; j < numGraphicElements - 1; j++){
pElements[j] = pElements[j + 1];
}
//delete pElements[numGraphicElements - 1]; //<-Here. This statement shows an error saying "Expression must have pointer type."
numGraphicElements--;
cout << "Graphic Element deleted successfully" << endl;
break;
}
}
}
}
};
#endif
kommentierte ich habe die Linie in DeleteGraphicElement() Funktion, bei der Anforderungs-/Fehler. Ich versuchte mit delete pElements[numGraphicElements - 1];
, aber diese Aussage zeigt einen Fehler, der sagt "Ausdruck muss Zeigertyp haben."
Das ist kompliziert. Sie müssen das letzte Element löschen und verschieben, da Arrays kontinuierlich sind, können Sie nicht einfach ein Element in der Mitte freigeben. – Rakete1111
Was hat Sie dazu gebracht zu glauben, dass Sie beim Löschen eines Elements aus dem Array "Speicher freigeben" müssen? Aufgrund der knappen Informationen sehe ich nichts, was befreit werden müsste. –
Besser nicht selbst 'new' und' delete' verwenden. Drücken Sie die Last, um sie zu [Smartpointern] (http://en.cppreference.com/w/cpp/memory) oder Standardcontainern zu bringen. –