在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;
};