我有一个 A 类,它在其构造函数中为整数(由类成员说 _pPtrMem 指向)动态分配内存,并在析构函数中释放相同的内存。为了避免浅拷贝,我重载了赋值运算符和拷贝构造函数。赋值运算符重载的广泛使用方式如下:
A& operator = (const A & iToAssign)
{
if (this == & iToAssign) // Check for self assignment
return *this;
int * pTemp = new int(*(iToAssign._pPtrMem)); // Allocate new memory with same value
if (pTemp)
{
delete _pPtrMem; // Delete the old memory
_pPtrMem = pTemp; // Assign the newly allocated memory
}
return *this; // Return the reference to object for chaining(a = b = c)
}
另一种实现相同的方法可能是
A& operator = (const A & iToAssign)
{
*_pPtrMem= *(iToAssign._pPtrMem); // Just copy the values
return *this;
}
既然第二个版本比较简单和快速(没有释放,内存分配),为什么它没有被广泛使用?有什么我无法解决的问题吗?
此外,我们从赋值运算符中返回一个相同类型的对象,用于链接(a = b = c)......所以不是返回*this而是返回iToAssign对象,因为两个对象现在应该相等?