c++ - 关于如何在基于动态数组的结构中存储键值对的想法

标签 c++ g++ placement-new

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

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

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

最佳答案

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

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

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

关于c++ - 关于如何在基于动态数组的结构中存储键值对的想法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4713094/

相关文章:

c++ - 将 char 数组缓冲区转换为字符串的好方法?

c# - 检查正在运行的特定进程的快速方法

c++ - 如何在 GCC 中通过优化构建 Release模式?

c++ - 为什么不能显式调用构造函数而析构函数可以?

c++ - 我们真的需要放置新表达式吗?

c++ - 似乎无法精确排列小数

c++ - Linux 的 header - VS Unix 扩展

linux - 为什么没有 g++ 编译错误的行号?

c++ - 将嵌套类型引用为类模板参数的问题

c++ - "placement new"有什么用?