Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何惯用地为不可变类定义赋值运算符? < 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); };_C++_Assignment Operator - Fatal编程技术网

如何惯用地为不可变类定义赋值运算符? < 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); };

如何惯用地为不可变类定义赋值运算符? < 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); };,c++,assignment-operator,C++,Assignment Operator,其中bytes是指向运行时加载的内存块malloced的指针 我是定义一个空的赋值运算符,还是让它使用自动生成的,显然会失败的赋值运算符 我正试图在一些选定的类上实现并强制执行单赋值语义。假设您不打算重新分配您的成员(使用const_cast等),我建议在代码中明确指出您没有使用操作符= 现行的C++标准,使其私下< /COD> >未实现: class Binary { //... private: Binary& operator = (const Binary&);

其中
bytes
是指向运行时加载的内存块
malloc
ed的指针

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


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

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

现行的C++标准,使其私下< /COD> >未实现:

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

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

您还可以使用boost的方法,并从中派生出为您做脏活的方法。这里有一些源代码:同样的技术也会应用到<代码>复制构造器< /C>吗?@ Jarrob,是的,它可以应用到<代码>类< /C> >(对于C++标准)的任何成员方法。