2

operator=在 C++ 中,在应该是不可变的类上定义的惯用方式是什么。例如它的所有成员变量都是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);
};

wherebytes是指向malloc运行时编辑的内存块的指针。

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

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

4

1 回答 1

9

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

在当前 C++ 标准中,使其private未实现:

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

在即将到来的 C++0x 标准中,delete它:

class Binary
{
  //...
  Binary& operator = (const Binary&) = delete;
};
于 2011-07-19T03:28:50.917 回答