【问题标题】:Ideas on how to store Key-Value pairs in a dynamic array based structure关于如何在基于动态数组的结构中存储键值对的想法
【发布时间】:2011-01-17 12:23:32
【问题描述】:

我有一个具有以下属性的动态数组:

  1. 存储键值对结构。
  2. 每当添加条目时重新分配内存 (realloc)。调用构造函数。
  3. 删除很棘手 - 被删除的条目必须从它所在的任何位置移动到数组的末尾 - 它的内容(键和值)必须与数组中的当前最后一项交换。调用析构函数。重新分配内存,以便删除该条目。

现在的问题是我最初通过引用将值存储在条目中。但是,那时我不能使用operator=。但我也不能按价值存储。而且我不想存储指针,因为这会破坏整个目的。我目前看到的唯一选择是在被删除的条目上调用placement new,并从最后一个元素调用复制构造函数。这将让我通过引用保留价值。有什么建议吗?还是我应该注意的陷阱?

【问题讨论】:

  • 你考虑过链表吗?似乎这是一个很好的论据。

标签: c++ g++ placement-new


【解决方案1】:

我不明白为什么按指针存储与按引用存储有什么不同。您将获得能够重新分配的优势,这是您说需要的。

  1. 它们占用相同的大小
  2. 只要容器还活着,你仍然有责任保持参照物活着
  3. 在某些时候仍然有人负责销毁所指对象
  4. 您可以对公共 API 隐藏此选择

引用的唯一优点是它不能为空,但没有人会直接访问它。您仍然可以在 API 中使用引用,因此无法传入 null。

【讨论】:

  • 不同的是引用是一个const指针。它不能重新安装。但是,我找到了我的问题的答案。看来我必须放弃引用并使用值副本。无论如何感谢您的反馈。
  • 你应该发布你的答案。我建议你不想要常量,所以使用指针。
猜你喜欢
  • 2019-01-22
  • 2013-01-28
  • 1970-01-01
  • 2017-01-24
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 2017-06-02
相关资源
最近更新 更多