如何习惯地为不可变类定义赋值操作符



在c++中,在不可变的类上定义operator=的惯用方法是什么?例如,它的所有成员变量都是const

typedef unsigned char byte;
class Binary
{
protected:
    const unsigned long size;
    const byte* bytes;
public:
    Binary(const unsigned long size);
    Binary(const Binary &b);
    ~Binary(void);
    Binary& operator=(const Binary &b);
};

其中bytes是指向malloc运行时占用的内存块的指针。

我应该定义一个空赋值操作符还是让它使用自动生成的显然会失败的赋值操作符?

我正在尝试实现和强制单个赋值语义在一些选择类。

假设你不打算重新分配你的成员(使用const_cast等),我建议在你的代码中明确提到你不使用operator =

在当前c++标准中,将其设置为private且未实现:

class Binary
{
  //...
private:
  Binary& operator = (const Binary&);
};
在即将到来的c++ 0x标准中,delete it:
class Binary
{
  //...
  Binary& operator = (const Binary&) = delete;
};

最新更新