c++ - 如何惯用地为不可变类定义赋值运算符?

标签 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 内存块的指针。

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

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

最佳答案

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

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

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

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

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

关于c++ - 如何惯用地为不可变类定义赋值运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6741982/

相关文章:

c++ - 删除了隐式声明的复制赋值运算符

c++ - 基类和派生类构造函数多态性问题

c++ - 在 C++ 中使用接口(interface)进行依赖注入(inject)

c++ - 直接从用户输入中调用,是否有在运行时生成函数的概念?

c++ - 再次保护自赋值

c++ - 在 C++ 中初始化变量的偏好

c++ - 如何使用 CodeBlocks 进行编译

c++ - 编写 lambda 函数 vector 时出现段错误

c++ - 虚赋值运算符重载——如何选择正确的重载函数?

c++ - 有没有人发现需要声明一个复制赋值运算符的返回参数const?