如标题中所述,如何在从数组中删除元素后释放分配的内存。这是我的代码:
// 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
我已经在DeleteGraphicElement()函数中注释了需求/错误所在的行。
我尝试使用delete pElements[numGraphicElements - 1];
但是此语句显示错误,指出“表达式必须具有指针类型。”
答案 0 :(得分:2)
您必须拥有一个指针数组,才能delete
数组中的单个元素。
您可以将所有后续元素移回一个地方,但仅使用标准工具无法重新分配new
内存。
或者您可以分配一个新数组并复制您想要的所有元素。
但最简单的方法是使用std::vector
和std::vector::erase
。这样你就不用担心这个以及你目前正在破坏的rule of three/five/zero。