请教高手: 实现上的选择

snprintf 2007-04-22 09:55:24
赋值函数, 动态分配内存, 有以下两种实现方法, 请教高手哪种更好一些, 为什么?

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;
}
...全文
208 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
snprintf 2007-04-23
  • 打赏
  • 举报
回复
应该是怎样的?
snprintf 2007-04-23
  • 打赏
  • 举报
回复
taodm 2007-04-23
  • 打赏
  • 举报
回复
stl的string的源码参考过没有?
snprintf 2007-04-23
  • 打赏
  • 举报
回复
如果 new 失败只抛出异常, 而不返回NULL, 是不是这两种方法都可以了呢?
snprintf 2007-04-23
  • 打赏
  • 举报
回复
恩, 明白, 谢谢大家了~!
晨星 2007-04-23
  • 打赏
  • 举报
回复
正是因为需要考虑异常发生时的情况,所以第一种处理起来麻烦。
第二种无所谓,异常发生就发生,至少可以很容易做到原来的对象保持不变。
长尾巴的悟空 2007-04-22
  • 打赏
  • 举报
回复
第一种,程序看上去多简洁呀
yutaooo 2007-04-22
  • 打赏
  • 举报
回复
补充一下, 在operator = 中, 最好判断一下是否自己赋给自己.
晨星 2007-04-22
  • 打赏
  • 举报
回复
第二种好。
第一种在发生异常时,需要手工捕捉后,在catch块中恢复原值,然后再重新抛出。

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧