在C++编程语言里,设定运算子(英文:assignment operator)是一种用= 符号表示等号的C++运算符,也称作设定运算子。
设定运算子是一个特别的赋值运算符,通常是用来把已存在的对象指定给其他相同类别的对象。它是一个特别的成员函数,如果程序员没有定义这个成员函数,那么编译器会自动地产生这个成员函数。编译器产生的代码是以单一成员进行对象复制的动作。
重载设定运算子的返回值该语言允许重载设定运算子具有任意返回类型(包括void)。但是,运算符通常被定义为返回对象的引用。这与内置类型的设定运算子的行为(返回指定的值)一致,并允许将运算符调用用作表达式,例如在控制语句或链式赋值中。此外,C ++标准库对某些用户提供的类型需要此行为。
重载复制设定运算子当必须制作对象的深层副本时,应考虑异常安全性。1资源释放永不失败的一种方法是:
获取新资源
释放旧资源
将新资源的句柄分配给对象
class My_Array { int * array; int count; public:My_Array & operator= (const My_Array & other) { if (this != &other) // protect against invalid self-assignment { // 1: allocate new memory and copy the elementsint int * new_array = new int[other.count]; std::copy(other.array, other.array + other.count, new_array); // 2: deallocate old memory delete [] array; // 3: assign the new memory to the object array = new_array; count = other.count; } // by convention, always return *this return *this; } }本词条内容贡献者为:
程鹏 - 副教授 - 西南大学