向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);