用new, delete和不用它们,而直接使用创建对象之间的区别是什么呀?

linsi 2005-11-26 07:07:06
比如在绘图时,用到一个画笔,现在有两种方法可以实现:

1.
CPen* pPen=new CPen(PS_SOLID,1, RGB(255, 0, 0));
CPen *pOldPen = dc.SelectObject(pPen);
....

dc.SelectObject(pOldPen);
delete pPen;

2.
CPen pen;
pen.CreatePen(PS_SOLID,1, RGB(255, 0, 0));
CPen *pOldPen = dc.SelectObject(pen);
....

dc.SelectObject(pOldPen);

这两种方法都能实现选择一个种颜色的画笔,使用完后然后删除它,请问它们有哪种区别,体现在哪几个方面?内存?代码?还是速度?

用哪种方法更好一些呢?
...全文
158 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
freemme 2005-11-27
  • 打赏
  • 举报
回复
1.指针比较灵活,你可以在程序的某个地方先声明一个指针,然后在后面需要用到他的地方在分配内存,这样资源的利用率比较高,而且有的地方必须用到指针才行,比如动态数组。
2.指针适合做为函数的参数。如果你在一个函数中需要修改形参的内容,用指针或引用都是比较好的选择。
femalelover 2005-11-26
  • 打赏
  • 举报
回复
每次看Featured的回复,总有收获,先MARK一下,看还有没有谁来补充.
呵呵,不知道Featured在东大研究什么方向的呢.
Featured 2005-11-26
  • 打赏
  • 举报
回复
一般来说这种情况是这样的:
直接:YourType variant;是构建到栈上,由系统回收;
而使用new是构建到堆上,需要手工回收,使用更加灵活,但速度比前者慢。

一般回答到这里就可以了

对于GDI中的某些东西,就有点特殊了
有些GDI的对象虽然是直接声明,但也会由对象管理器将其构建到堆上,但是特殊的是:这个虽然在堆上,并不需要你回收,而是系统自动回收。(其实是GDI对象管理器回收)
这里可能听的有点晕。

我想说的是,对你的标题中问的问题,回答非常简单,就是最上面说的。
但你正文中的例子举得比较特殊,让我不得不说这么多一大堆话。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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