通过引用数组的元素来替换变量

时间:2015-03-16 15:03:51

标签: c++ arrays reference

我有一个正常工作的类,并使用整数作为标志变量(按位运算):

class foo{
   uint32_t flags;
   ...
};

我想将这些标志扩展到更高的大小,例如512.但是我想保持旧代码与新大小无关。

我尝试了这个但不起作用:

class foo{
   uint32_t flags_ext[16];
   uint32_t& flags = flags_ext[0];
   ...
};

在做asignment等时给了我一堆问题。另外警告我可能会双重删除内存。

任何使代码行为但uint32_t是数组的一部分的方法吗?

1 个答案:

答案 0 :(得分:3)

实现正确的默认,复制构造函数和赋值运算符,你应该好好去:

class foo{
   uint32_t flags_ext[16];
   uint32_t& flags;

   foo():
       flags( flags_ext[0] )
   {}

   // copy c'tor takes care _not_ to copy the reference member
   foo( const foo& other ):
       flags( flags_ext[0] )
   { ::memcpy(flags_ext, other.flags_ext, sizeof(flags_ext)); }

   const foo& operator=(const foo& other) {
      if( this==&other )
          return *this;
      // do _not_ copy the 'flags' member!
      ::memcpy(flags_ext, other.flags_ext, sizeof(flags_ext));
      return *this;
   }
};