状況:コンテナの先頭に格納されているconst char *をユーザーに返すPop()関数をサポートするリストのようなコンテナを実装しています。ただし、実装者として、元のconst char *を返す必要があるかどうか(コンテナからノードポインタを削除するが、const char *自体でdeleteを呼び出さない)、または新しいメモリを割り当てて要素のコピーを返します。
クラスやプロジェクトから、常にコピーを支持する人々に遭遇しました。そのため、以前に返された参照(ゲッターなどから)やconst char *へのポインターは、ポップされたバージョンを変更できませんが、このアプローチでは追加の割り当てが必要であり、 strcpy、削除せずに元の削除されていないポインタをconstcharに返すだけで本当に問題になるかどうかを尋ねたいと思いました。割り当てとコピー(および後で元の参照を削除)を使用したアプローチのコードスニペットは次のとおりです。
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()は一般的なコンテナ操作なので、一般的なアプローチは何かを尋ねたいと思いました。