【问题标题】:overloaded [] operator for both accessing and setting a value (C++)用于访问和设置值的重载 [] 运算符 (C++)
【发布时间】:2012-03-28 10:12:08
【问题描述】:

我第一次为一些实用的东西重载 [] 运算符,我遇到了我以前从未想过的东西。 我正在尝试制作一个包含指针的自定义类数组类(并提供一些独特的功能)。 使用 [] 运算符从我的类中返回其中一个指针是显而易见的,但我也设想能够从外部更改指针的目标地址。 也许我想多了,但是对返回值的赋值(比如fish[0]=lpHatAddress;)不会因为返回的值只是一个地址而导致错误吗?

我能想到的唯一解决方案是存储指向指针的指针,这将占用两倍的内存。 我是否忽略了一些明显的东西? 有没有干净的方法来做到这一点?

【问题讨论】:

  • 显示您的[] 重载代码。我相信它会返回对元素的引用。
  • 这几乎是发明引用的全部原因。
  • @SethCarnegie 对不起。说我生疏是轻描淡写的。 :P

标签: c++ overloading operator-keyword setter getter


【解决方案1】:

您应该将运算符的结果作为参考。所以如果你的数据类型是int,那么操作符会返回一个int&

【讨论】:

  • 现在,这听起来很熟悉。我完全忘记了存在引用返回。具有讽刺意味的是,如何为这些东西上大学让我忘记了我已经知道的一半。 XD
  • @user980058 但是请记住,您可以通过引用返回而不导致未定义行为的唯一原因是因为您将返回引用的对象存储在函数范围之外,以便即使在函数返回后,该引用仍指向有效的内存区域。确保你永远不会返回对局部变量的引用(我相信你已经知道了,但我只是想保证安全)。
【解决方案2】:

【讨论】:

    【解决方案3】:

    标准技巧是使用proxy (or surrogate) design pattern。这个想法是返回一个包含目标指针的临时对象,该对象支持转换为const T* 指针和T& 的赋值,将赋值转发给目标指针。 Scott Meyer 在他的More Effective C++ 书中讨论了这种模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多