请教高手: 实现上的选择
赋值函数, 动态分配内存, 有以下两种实现方法, 请教高手哪种更好一些, 为什么?
class MyString
{
private:
char *str;
...
public:
MyString & operator =(const MyString &);
...
};
方法一:
MyString &MyString::operator =(const MyString &myString)
{
char *temp = str; // 首先记录原始内存地址
str = new char[strlen(myString.str)+1]; // 申请新内存,并
// 赋给str
delete [] temp; // 删除原始内存
return *this;
}
方法二:
MyString &MyString::operator =(const MyString &myString)
{
char *temp = new char[strlen(myString.str)+1]; // 首先分配一块新内存
// 并赋给临时指针
delete [] str; // 删除原始内存
str = temp; // 令str指向新内存
return *this;
}
[解决办法]
第二种好。
第一种在发生异常时,需要手工捕捉后,在catch块中恢复原值,然后再重新抛出。
[解决办法]
正是因为需要考虑异常发生时的情况,所以第一种处理起来麻烦。
第二种无所谓,异常发生就发生,至少可以很容易做到原来的对象保持不变。