向COblist的一个对象中插入数据后,数据丢失的有关问题
向COblist的一个对象中插入数据后,数据丢失的问题
class CPropertyData : public CObject
{
public:
void SetData(CString data);
CString GetData();
void SetTitle(CString title);
CString GetTitle();
void SetName(CString name);
CString GetName();
CPropertyData();
virtual ~CPropertyData();
protected:
CString d_name;
CString d_title;
CString d_data;
};
class CDataList
{
public:
void Add(CPropertyData* pData,int n);
CDataList();
virtual ~CDataList();
protected:
CObList m_mbhl;
}
void CDataList::Add(CPropertyData *pData,int n)
{
switch(n){
case 1:
m_mbhl.AddTail(pData);
break;
}
}
我在一个对话框的一个函数(例如void CMbhlProperty::OnOK())中调用了Add函数后,
void CMbhlProperty::OnOK()
{
CPropertyData p;
p.SetName( "shihao ");
list.Add(&p,MBHL);
// CDialog::OnOK();
}
跟踪发现m_mbhl中是有d_name;d_title;d_data;这三个数据的。而且只要在这个函数中这三个数据都有。
但是当我调用这个对话框的其他函数时(例如void CMbhlProperty::OnCancel()),跟踪发现,这三个数据没有了。这期间,对话框没有关闭。list这个对象是在对话框的类定义中申明为public的。
------解决方案--------------------
由于你存储你的那三个数据的变量p是局部变量。出了函数作用域就回收了。或者把p定义成指针,传递指针就不会有问题:
CPropertyData *p=new CPropertyData() ;
p-> SetName( "shihao ");
list.Add(p,MBHL);
class CPropertyData : public CObject
{
public:
void SetData(CString data);
CString GetData();
void SetTitle(CString title);
CString GetTitle();
void SetName(CString name);
CString GetName();
CPropertyData();
virtual ~CPropertyData();
protected:
CString d_name;
CString d_title;
CString d_data;
};
class CDataList
{
public:
void Add(CPropertyData* pData,int n);
CDataList();
virtual ~CDataList();
protected:
CObList m_mbhl;
}
void CDataList::Add(CPropertyData *pData,int n)
{
switch(n){
case 1:
m_mbhl.AddTail(pData);
break;
}
}
我在一个对话框的一个函数(例如void CMbhlProperty::OnOK())中调用了Add函数后,
void CMbhlProperty::OnOK()
{
CPropertyData p;
p.SetName( "shihao ");
list.Add(&p,MBHL);
// CDialog::OnOK();
}
跟踪发现m_mbhl中是有d_name;d_title;d_data;这三个数据的。而且只要在这个函数中这三个数据都有。
但是当我调用这个对话框的其他函数时(例如void CMbhlProperty::OnCancel()),跟踪发现,这三个数据没有了。这期间,对话框没有关闭。list这个对象是在对话框的类定义中申明为public的。
------解决方案--------------------
由于你存储你的那三个数据的变量p是局部变量。出了函数作用域就回收了。或者把p定义成指针,传递指针就不会有问题:
CPropertyData *p=new CPropertyData() ;
p-> SetName( "shihao ");
list.Add(p,MBHL);