2 jujiawu1024 jujiawu1024 于 2016.02.25 17:32 提问

MFC对象的释放问题,怎么改写MFC对象

MFC里面的对象,比如CSTRING,必须用new和delete么?用malloc可以么?因为有个结构体,谢谢

2个回答

caozhy
caozhy   Ds   Rxr 2016.03.20 21:47
已采纳

如果是用指针动态分配的,用了new,就要配对使用delete,如果是成员变量,就不需要。

baijiaheizhiganmao
baijiaheizhiganmao   2016.03.03 14:56

你的CSTRING是自定义的类型还是说CString呢?
1 CString 指针对象可以通过new 和delete来获取和释放,但是普通对象你直接写 CString ab;就行了,会有构造函数做这件事情的.
2 假如是你自定义的,你可以使用malloc 和 free 但是记住,假如你CSTRING定义里面有string 或者 CString成员,那么要小心了,因为你可能没办法malloc
出正确的空间(你知道一个string应该给多大的空间吗?不知道,那么你如何传给malloc你对象的大小呢).

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
MFC的GDI对象的构造与释放
一、设备上行文 CDC对象封装了设备上下文的一个句柄m_hDC,如果通过GetDC();来操作设备上下文,一定要在退出函数时调用ReleaseDC(); GetDC();相当于获得了一个当前设备上下文的一个副本,调用它是会重新分配内存的,ReleaseDC();相当于将新分配的内存free。 如果CClientDC来操作设备上下文,那么它会在对象的析构函数中调用ReleaseDC();
关于MFC GDI对象资源释放一些注意事项
1、在WIN32模式下使用GDI对象时需遵循   CreateXXX  ---->  Delete       GetXXX -----> Release 方式来使用GDI对象, 2、MFC中这CGDI类会在类析构时会自动对资源进行释放,(前提条件是,当一个GDI对象在被选入DC后,在类析构之前必须要选出来,否则资源将不会被释放) 3、对于MFC的GetDC获取的CDC指针,也
定位MFC程序GDI对象泄漏过程中的一些经验
定位MFC程序GDI对象泄漏过程中的一些经验之前接触MFC比较少,最近一个程序需要使用MFC写界面。写完之后发现程序运行一段时间后异常卡顿,并且WIN7系统任务栏图标出现一些毛边等异常情况。重新运行程序,打开任务管理器发现GDI对象不断增加,且数量到达9999后程序开始异常。因此判断程序可能存在GDI对象泄漏,即创建的GDI对象没有及时释放。
MFC使用Create创建创建窗体后释放内存的方法
当在一个窗口中生成另外一个窗口 时:         CTestDlg *pTd ; 头文件定义 CRect rc; GetWindowRect(&rc); CRect rc1; pTd= new CTestDlg ; pTd->Create(IDD_123, this);//窗口的ID pTd->GetWindowRect(&rc1);         pTd->
GetDC()没有释放造成的后果
http://www.cnblogs.com/fredliu/p/4932177.html 最近做的项目中需要显示视频监控窗口,从采集卡中读到图像的数据,需要实时显示出来,而且速度比较快。   由于比较简单,就直接使用了GDI画图,以前复杂的都用openGL啥的工具了,这次这个简单,就直接用GDI了。 先获取DC,然后画图 pDC =
CBRUSH释放、CreateSolidBrush的内存释放与内存泄露问题及其解决方法
今天编了一个小程序,内存消耗却很大,随着时间用的越来越久,内存消耗越来越大。研究了一下,原来CBRUSH对象没有释放。原来程序如下:HBRUSH CPORTSetting::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr ; COLORREF backColor =(COLORREF)   GetSysColor(
MFC程序的theApp对象
每次创建一个MFC应用程序,不管是Doc/View类型的,还是对话框类型的,都会发现MFC会自动为我们创建一个CXXXApp的类,其中XXX表示我们的工程名。其实很多时候,我们都不会用到这个类,也不会在其中添加属性和方法,而是创建我们自己的类。那么MFC为什么会生成这个类呢?下面我以简单的MFC对话框程序为例子,谈一下自己的理解。     利用Visual Studio 2010创建一个MFC对
VC++中GDI对象的释放问题
http://bbs.csdn.net/topics/290080408   VC++中GDI对象的释放问题
关于GDI资源使用后未释放,导致GDI对象猛增,程序花屏,异常退出的问题
调试一个对话框程序,对话框上加载了自己实现的一个Grid控件。当添加多条数据后拖动滚动条多次后导致控件花屏。开始以为是ScrollWindow函数调用有问题,但打开资源管理器发现进程对应的GDI对象在刷新时猛增,到接近9999时便崩溃了,于是到重绘函数中发现GDI对象在调用后没有DeleteObject(),导致GDI对象一直增加。         后来在网上查找到一片文章觉得不错,分享:
MFC C++ 中的内存释放问题
使用MFC编程的朋友们都知道,当我们如下调用了: CDC *pDC=GetDC();//获得窗口的设备描述表 接下来我们做完绘图功能后要调用: ReleaseDC(pDC);//释放设备描述表这样做的目的,可以避免内存泄露。如果您不小心在视频流中忘记释放设备描述表,您的程序很快就会崩溃。 这里我们说明几种在MFC、C++中容易产生内存泄露的地方,希望朋友们在今后编程中多加小心。