免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1262 | 回复: 4
打印 上一主题 下一主题

网上看到的一段代码,这样不会内存泄漏吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-23 01:55 |只看该作者 |倒序浏览
//Abstract Factory Demo

#include <iostream.h>;

class Shape {
public:
   Shape()              { id_ = total_++; }
   virtual void draw()  = 0;
protected:
   int         id_;
   static int  total_;
};
int Shape::total_ = 0;

class Circle : public Shape { public:
   void draw() { cout << "circle " << id_ << ": draw" << endl; } };
class Square : public Shape { public:
   void draw() { cout << "square " << id_ << ": draw" << endl; } };
class Ellipse : public Shape { public:
   void draw() { cout << "ellipse " << id_ << ": draw" << endl; } };
class Rectangle : public Shape { public:
   void draw() { cout << "rectangle " << id_ << ": draw" << endl; } };

class Factory { public:
   virtual Shape* createCurvedInstance()   = 0;
   virtual Shape* createStraightInstance() = 0;
};
class SimpleShapeFactory : public Factory { public:
   Shape* createCurvedInstance()   { return new Circle; }
   Shape* createStraightInstance() { return new Square; }
};
class RobustShapeFactory : public Factory { public:
   Shape* createCurvedInstance()   { return new Ellipse; }
   Shape* createStraightInstance() { return new Rectangle; }
};

void main() {
#ifdef SIMPLE
   Factory*  factory = new SimpleShapeFactory;
#elif ROBUST
   Factory*  factory = new RobustShapeFactory;
#endif
   Shape*    shapes[3];

   shapes[0] = factory->;createCurvedInstance();   // shapes[0] = new Ellipse;
   shapes[1] = factory->;createStraightInstance(); // shapes[1] = new Rectangle;
   shapes[2] = factory->;createCurvedInstance();   // shapes[2] = new Ellipse;

   for (int i=0; i < 3; i++)
      shapes->;draw();

   //这里factory 和 shape 都没有释放出来。

}

论坛徽章:
0
2 [报告]
发表于 2005-10-23 10:13 |只看该作者

网上看到的一段代码,这样不会内存泄漏吗?

程序一下子就运行完了
泄漏也没什么
不过这样的风格不太好

论坛徽章:
0
3 [报告]
发表于 2005-10-23 11:50 |只看该作者

网上看到的一段代码,这样不会内存泄漏吗?

风格太不好了

论坛徽章:
0
4 [报告]
发表于 2005-10-23 11:59 |只看该作者

网上看到的一段代码,这样不会内存泄漏吗?

肯定有,new就要delete,malloc就要free.养成好的习惯,程序小可能无所谓,程序大了,以后到底哪儿错都很难找。如果你的程序后面用到SimpleShapeFactory,那么程序就很可能出问题。因为一般对指针的引用都是if (SimpleShapeFactory != NULL) ...

论坛徽章:
0
5 [报告]
发表于 2005-10-23 22:39 |只看该作者

网上看到的一段代码,这样不会内存泄漏吗?

SimpleShapeFactory 不是变量哦。。 你说的是factory吧。

我想原文可能只是想着重讲明模式吧,好像所有例子都没有释放的语句。
请教一下 怎么的风格才算“好的风格”。最好就是有些代码。或者推荐一些书的章节也可以阿。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP