使用delete运算符删除结构中的元素

时间:2014-04-24 16:43:54

标签: c++

我有这样的结构:

struct m_doc{
char id[30];
int ISBN[30];
char title[50];
char author[50];
int year[30];

};

当我尝试使用delete运算符删除其中的元素时,发生了这种情况:

if (doc.id[i] == doc.id[j])
    delete[] doc.author[j], doc.id[j], doc.ISBN[j], doc.title[j], doc.year[j];//expression must have pointer type

错误仅在doc.author的doc上,而其他的则很好。

2 个答案:

答案 0 :(得分:1)

声明这种方式的数组在超出范围时会自动删除。 您只需要删除声明如下的数组:

int* array = new int[30];
//Do work
delete[] array;

但是,您应该优先使用std::vector而不是std::array而不是代码中使用的数组std::vector。它更不容易出错。

在您的情况下(几乎总是如此),if (doc.id[i] == doc.id[j]) { doc.author.erase(doc.author.begin() + j); //and so on } 是最合适的数据类型。然后你可以做这样的事情:

{{1}}

答案 1 :(得分:0)

您只能删除使用new创建的内容。您可以按如下方式创建指针: m_doc * instance = new m_doc();

然后你可以稍后删除......

删除m_doc;

或者您可以将每个成员创建为手动新建的指针。