关于new之后delete的问题

chbq1210 2005-10-06 10:26:40
以下是我写在Global.h中的一个函数,我想根据nRow和nCol的值来动态创建这样大小的矩阵,创建了nRow X nCol个Edit框,
方便我输入矩阵的值,所以可能用了很多new CEdit,和一个new CDialog,但我知道这样new之后,在不用的时候应该删除
它们来释放内存。因为写的是一个全局函数,不知道在那里使用delete才合适,请大家指点一二。谢谢!
BOOL CreateMatrixDlg(int nRow, int nCol,int EditID,int DlgID,int btnID)

{

CDialog *pMatrixDlg=new CDialog;

//Check if new succeeded and we got a valid pointer to a dialog object

if(pMatrixDlg != NULL)

{

BOOL ret = pMatrixDlg->Create(DlgID);

if(!ret) //Create failed.

AfxMessageBox("Error creating Dialog");

pMatrixDlg->ShowWindow(SW_SHOW);

.........

pMatrixDlg->SetWindowPos(&CWnd::wndNoTopMost,(nCx-nWide)/2,\

(nCy-nHight)/2,nWide,nHight,SWP_SHOWWINDOW );

}

else

{

AfxMessageBox("Error Creating Dialog Object");

return FALSE;

}

.............

for (int i=0;i<nRow;i++)

for(int j=0;j<nCol;j++)

{

CEdit *pMatrixData=new CEdit;//这里new了很多

rect.left=(rectClient.left+CxData*(2*j+1)/2)-15;

rect.top=(rectClient.top+CyData*(2*i+1)/2)-10;

rect.right=(rectClient.left+CxData*(2*j+1)/2)+15;;

rect.bottom=(rectClient.top+CyData*(2*i+1)/2)+10;;

pMatrixData->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE |\

WS_TABSTOP | WS_BORDER,rect,(CWnd*)pMatrixDlg,EditID++);

}



//Create a OK Button



CButton *pBtn=new CButton;//这里也有一个OK按钮

rectBtn.left=(rectClient.right-rectClient.left)/2-30;

rectBtn.right=(rectClient.right-rectClient.left)/2+30;

rectBtn.top=rectClient.bottom-30;

rectBtn.bottom=rectClient.bottom-5;

pBtn->Create("确定",BS_DEFPUSHBUTTON |WS_VISIBLE|WS_CHILD,rectBtn,\

(CWnd*)pMatrixDlg,btnID);


return TRUE;

}
//?????我的delete应该分别放在那?
...全文
346 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chbq1210 2005-10-06
  • 打赏
  • 举报
回复
我想也应该用数组比较好一些,每次都创建效率可能很差,但删除的是不是创建完了就删啊?
zx_sanjin 2005-10-06
  • 打赏
  • 举报
回复
>>CEdit *pMatrixData=new CEdit;//这里new了很多

应该new到一个指针数组里,这样才能在delete的时候将它们的地址找到然后释放掉

应该这样写:
CEdit **pMatrixData=new CEdit[nRow][nCol];
for (int i=0;i<nRow;i++)

for(int j=0;j<nCol;j++)

{

rect.left=(rectClient.left+CxData*(2*j+1)/2)-15;

rect.top=(rectClient.top+CyData*(2*i+1)/2)-10;

rect.right=(rectClient.left+CxData*(2*j+1)/2)+15;;

rect.bottom=(rectClient.top+CyData*(2*i+1)/2)+10;;

pMatrixData[i][j]->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE |\

WS_TABSTOP | WS_BORDER,rect,(CWnd*)pMatrixDlg,EditID++);

}
chbq1210 2005-10-06
  • 打赏
  • 举报
回复
"在你需要输入的时候,激活一个区域,比如点击一个数字",还是不太明白,
我的思路是这样的,比如我要输入3 x 4 矩阵,输入行和列的值点一个OK按钮之后,
就可以产生三行四列的一个Edit面板,当我输入完所以的值后,再点一下Edit面板上的
OK键之后,输入的值就存放在我指定的矩阵中了,我做的只是一个练习,一是想学动态
创建,一是想学一点矩阵运算的知识,可能这个方法有点笨,当时想到这样就做了,可能
还有很多方法可以实现。这里对何时用delete不太清楚。
菜牛 2005-10-06
  • 打赏
  • 举报
回复
鉴于你不可能同时在无数个编辑框中输入数据,这种设计效率太低下了。其实你只需要一个编辑框,其它信息只是显示一下而已,用绘图输出好了。在你需要输入的时候,激活一个区域,比如点击一个数字,在该处生成编辑框就行了,输入完了销毁或者隐藏。

16,550

社区成员

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

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

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