delete问题

shaAbca 2011-01-02 05:16:31
class Bitmap
{
};

class Widget
{
private:
Bitmap *pb;
};

Widget& Widget::operator=(const Widget& rhs)
{
delete pb;
pb = new Bitmap(*rhs.pb);
return *this;
}

不晓得书上说什么delete求高手解答
...全文
70 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
九度空间 2011-01-02
  • 打赏
  • 举报
回复
你可以选择不用的
we_sky2008 2011-01-02
  • 打赏
  • 举报
回复

Widget& Widget::operator=(const Widget& rhs)
{
if (this != &rhs)//这里应该先判断下,否则若赋值对象和被赋值对象是同一个对象时下面的delete pb;和pb = new Bitmap(*rhs.pb);可能会引起错误
{
delete pb;//删除当前pb指向的Bitmap对象,否则下面的pb被赋值后会引起内存泄露
pb = new Bitmap(*rhs.pb);//pb指向新动态申请的Bitmap对象,并用*rhs.pb作参数调用Bitmap的拷贝构造函数来初始化
}
return *this;
}

liutengfeigo 2011-01-02
  • 打赏
  • 举报
回复
看构造函数,联系起来,想想就明白了
Nov_c 2011-01-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaoyuanyuan2009 的回复:]
这里有 new 这个关键字。这个关键字产生的对象是在堆中的。每一个对象都要占用一块内存区,当你用完这个对象的时候,当你用完这个对象的时候就要删除这个对象,以便释放这块内存。 用于释放堆内存的关键字就是 delete。
[/Quote]
+
duanhuicen 2011-01-02
  • 打赏
  • 举报
回复
delete 与 new 对应。
delete [] 与 new [] 对应。
bdmh 2011-01-02
  • 打赏
  • 举报
回复
delete是对应着new来说的,比如

char* p = new char[100];
那么当操作完p后,要记得
delete[] p;
chenspnjupt1234 2011-01-02
  • 打赏
  • 举报
回复
在赋值之前将本来申请的空间删除掉(不过好像有个问题,没有考虑到pb为空的情况,可能是书上示意代码,没有考虑完整性),然后使用传入的Widget对象中的pb重新构造一个对象付给pb。
谁学逆向工程 2011-01-02
  • 打赏
  • 举报
回复
这里有 new 这个关键字。这个关键字产生的对象是在堆中的。每一个对象都要占用一块内存区,当你用完这个对象的时候,当你用完这个对象的时候就要删除这个对象,以便释放这块内存。 用于释放堆内存的关键字就是 delete。

64,676

社区成员

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

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