首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

: 实现上的选择

2012-02-24 
请教高手: 实现上的选择赋值函数,动态分配内存,有以下两种实现方法,请教高手哪种更好一些,为什么?classMyS

请教高手: 实现上的选择
赋值函数,   动态分配内存,   有以下两种实现方法,   请教高手哪种更好一些,   为什么?

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块中恢复原值,然后再重新抛出。
[解决办法]
正是因为需要考虑异常发生时的情况,所以第一种处理起来麻烦。
第二种无所谓,异常发生就发生,至少可以很容易做到原来的对象保持不变。

热点排行