您的位置:程序门 -> c/c++ -> c++ 语言



这里是否会发生内存泄露?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


这里是否会发生内存泄露?
发表于:2008-01-22 23:14:08 楼主
在c++primer   4版的14.8题的解答感觉有点问题(重载操作符"> > "):

istream&   operator> > (istream&   in,checkoutrecord   &c)  
{in> > c.book_id> > c.title> > c.date_borrowed> > c.date_due
      > > c.borrower.first> > c.borrower.second;
if(!in){
c=checkoutrecord();
return   in;
}

c.wait_list.clear();//删除元素
while(in){
pair <string,string>   *p=new   pair <string,string> ;
in> > p-> first> > p-> second;
if(!in){
                    delete   p;       //原书题解里没有这行,我加的,需要吗?
    return   in;
}
c.wait_list.push_back(p);
}
return   in;
}

这是类定义:
class   checkoutrecord{
public:
              friend     istream&   operator> > (istream&,checkoutrecord   &);
private:
                double   book_id;
                string   title;
                date   date_borrowed;
                date   date_due;
                pair <string,string>   borrower;
                vector <pair <string,string> *   >   wait_list;
};

如果不写:   delete   p;       的话,是否回发生内存泄露?
发表于:2008-01-23 08:36:581楼 得分:0
为什么要对自己这么没自信?
你掌握了内存泄漏的原理,却不敢用。
发表于:2008-01-23 08:56:072楼 得分:0
相信自己,没错的!!!
告诉你一个方法来调试
设断点,跟踪下p的内存数据,看看你delete前后的变化,就知道自己有没有错了
发表于:2008-01-23 09:22:113楼 得分:0
你是对的
发表于:2008-01-23 09:30:384楼 得分:0
不要这么没自信,书都是人写的。
不要太相信书了,相信自己思考后的结果!
发表于:2008-01-23 09:55:175楼 得分:0
那还用问?那可是new啊!
发表于:2008-01-23 10:09:036楼 得分:0
you   are   right
发表于:2008-01-23 11:33:037楼 得分:0
谢谢各位
发表于:2008-01-23 11:56:518楼 得分:0
计算机科学也是一门理科,验证的科学。
自己验证的就是对的。
发表于:2008-01-23 13:00:399楼 得分:0
lz可以设置断点跟踪下,相信自己
发表于:2008-01-23 15:01:1210楼 得分:0
malloc出来的东西用完之后要free
new出来的东西用完了要delete

如果已经free或delete了的东西再free或delete一次运行就会报错的
同样,如果没有malloc或new的指针,对他free或delete也会报错的
发表于:2008-01-23 15:03:2711楼 得分:0
补充一下
如果是null除外
春节快乐
发表于:2008-01-23 15:23:5212楼 得分:0
需要的,加上好!


快速检索

最新资讯
热门点击