情况:我正在实现一个类似列表的容器,它支持一个 Pop() 函数,该函数应该向用户返回存储在容器前面的 const char*。但是,作为实现者,我不确定是否应该返回原始的 const char*(从容器中删除节点指针,但不对 const char* 本身调用 delete),或者是否应该分配新的内存和返回元素的副本。
在课堂和项目中,我遇到过那些始终支持复制的人,因此以前返回的引用(来自 getter 等)和指向 const char* 的指针都不会改变弹出的版本,但是由于这种方法需要额外的分配和strcpy,我想我会问是否只是简单地返回原始的、未删除的指向 const char 的指针而不删除它真的是一个问题。这是 WITH 分配和复制方法的代码片段(然后删除原始引用):
const char* LinkedList::PopHeadString()
{
node* deletehead = head_;
char* output = NULL;
if (head_ != NULL && GetHeadType() == STRING) {
output = new char[strlen(head_->en.data.str) + 1];
strcpy(output, head_->en.data.str);
head_ = head_->next;
delete deletehead->en.data.str;
delete deletehead;
--nEntries_;
}
return output;
}
由于 Pop() 是一种常见的容器操作,我想我会问一般的方法是什么。