注意VC的内存使用,栈变量不可放在全局容器

来源:互联网 发布:龙神契约披风升阶数据 编辑:程序博客网 时间:2024/05/17 01:41

2011年,3月,编者:李国帅

编程序要小心谨慎,符合规则使用程序。

对象定义

class CDataAttibute:public CObject //通用数据结构{public:CDataAttibute(){m_fx=0.0F;m_fy=0.0F;m_csTag ="";m_fValue ="";m_csClass ="";}CDataAttibute(double dx,double dy):m_fx(dx),m_fy(dy){}~CDataAttibute(){}public:double m_fx;double m_fy;CString m_csTag;CString m_fValue;CString m_csClass;CDataAttibute & operator= (CDataAttibute &pDataAttibute) //重载 = 算符{if(&pDataAttibute == this)return *this;m_fx = pDataAttibute.m_fx;m_fy = pDataAttibute.m_fy;m_csTag = pDataAttibute.m_csTag;m_fValue = pDataAttibute.m_fValue;m_csClass = pDataAttibute.m_csClass;return *this;}};

对象使用


public:CObArray aryData;void CWinDialogDlg::OnBnClickedButton1(){CDataAttibute data_attibute;data_attibute.m_fx = 1;data_attibute.m_fy = 2;data_attibute.m_csClass ="World";data_attibute.m_fValue ="NewCuntry";data_attibute.m_csTag ="new Area";aryData.Add(&data_attibute);//把一个临时对象的指针放在公共对象是不对的。CDataAttibute* pdata_attibute = new CDataAttibute;*pdata_attibute = data_attibute;aryData.Add(pdata_attibute);//应该这样做}void CWinDialogDlg::OnBnClickedButton4(){int nCount = aryData.GetCount();//2CDataAttibute* pdata_attibute0 = (CDataAttibute*)aryData.GetAt(0);//内存已经被释放CDataAttibute* pdata_attibute1 = (CDataAttibute*)aryData.GetAt(1);//正常获取。ASSERT(pdata_attibute0->m_fx == 0);//浮点比较有问题delete pdata_attibute0;//错误,内存已经释放delete pdata_attibute1;aryData.RemoveAt(1);aryData.RemoveAt(0);}
阅读全文
0 0
原创粉丝点击