如何为不可变类定义赋值运算符?

时间:2011-07-19 03:26:19

标签: c++ assignment-operator

在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的指针。

我是否定义了一个空赋值运算符或让它使用自动生成的运算符明显失败?

我正在尝试在一些选定的类上实现和强制执行单一赋值语义

1 个答案:

答案 0 :(得分:9)

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

在当前的C ++标准中,将其设为private并且未实现:

class Binary
{
  //...
private:
  Binary& operator = (const Binary&);
};

在即将推出的C ++ 0x标准中,delete

class Binary
{
  //...
  Binary& operator = (const Binary&) = delete;
};