首页 > 解决方案 > 当'operator double *'似乎可以完成工作时,为什么需要'operator []'

问题描述

operator[]似乎是多余的,因为operator double*似乎已经足够了。

这是我的代码:

struct CStandardData
{
  inline operator double* () { return m_standardData; }
  //inline double& operator [] (size_t ix) { return m_standardData[ix]; }
  size_t  m_standardDataRefCnt{ 0 };
  double m_standardData[1];
} sd;

sd在各种不同的情况下使用,包括double *a = sd, sd[x] = 5.0,sd[x] >= sd[y]等,并且无论我是否已operator []注释掉或定义,代码似乎都可以正常工作。

在什么情况下需要有operator []

我可能应该添加一些上下文:

double sd[]我在超过 5000 行的大型代码库中使用了动态分配的内部数据。然后我需要向这个双精度数组添加分配引用计数,因为需要复制它所在的对象,并将副本传递给用户(double sd[]> 10000 个元素,所以我不想制作额外的副本)。这是我设计的方案,无需修改使用它的大量代码库,但不确定省略operator []是否会导致任何问题。

标签: c++operator-overloading

解决方案


在什么情况下需要有操作符[]?

在您希望对象充当容器而不是指针的情况下。例如这段代码:

MyContainer cnt;
if( cnt ) // something

如果您定义operator double *,将编译,但我不希望此代码一般为我的容器编译,因为它没有任何意义。


推荐阅读