首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

请问关于内存释放的有关问题一大堆.

2012-03-13 
请教关于内存释放的问题一大堆.....1.TThread的类内对象是否需要在~()里释放?class ThreadPost : public T

请教关于内存释放的问题一大堆.....
1.TThread的类内对象是否需要在~()里释放?
class ThreadPost : public TThread
{  
  private:
  TMemoryStream *ptmsRequest;
  TMemoryStream *ptmsAnswer;
  TIdHeaderList *pcusHead;
  TIdHTTP *http;
  TPostFrm *HttpForm; //窗口
  public:
   
  __fastcall ThreadPost(int id,TMemoryStream *tmsRequest,TIdHeaderList *CusHead,TPostFrm *Frm,bool CreateSuspended);
  __fastcall virtual ~ThreadPost(void);
}

__fastcall ThreadPost::~ThreadPost() //这里如果把下面注释去掉,程序出错
{
  //http->Free();
  //ptmsRequest->Free();
  //ptmsAnswer->Free();
  //pcusHead->Free();
}
调用方式
TPost = new ThreadPost(id,ptmsRequest,pcusHead,this,false);
如果把::~ThreadPost() 里的注释去掉,会出错内存错误


2.自定义窗口内的对象是否需要在~()里释放?
class TPostFrm : public TForm
{
__published:// IDE-managed Components
  TBevel *Bevel1;
  TLabel *Label1;
  TLabel *Label2;
  TButton *btn_cancel;
  TProgressBar *ProgressBar;
  TEdit *edt_SH;
  TEdit *edt_status;
  TButton *btn_ok;
  TIdConnectionIntercept *httplog;
  void __fastcall httplogConnect(
  TIdConnectionIntercept *ASender);
  void __fastcall httplogSend(
  TIdConnectionIntercept *ASender, TIdBytes &ABuffer);
  void __fastcall httplogReceive(
  TIdConnectionIntercept *ASender, TIdBytes &ABuffer);
private:
  TMemoryStream *ptmsAnswer;
  TMemoryStream *ptmsRequest;
  TIdHeaderList *pcusHead;
  bool ReConnect;
  ThreadPost *TPost;  
   
  void __fastcall StartPost();
  bool __fastcall GetReConnect(void);
public:// User declarations
  __fastcall TPostFrm(TMemoryStream *tmsRequest,TIdHeaderList *cusHead,TComponent* Owner);
  __fastcall virtual ~TPostFrm(void);
  void __fastcall FormMessage(tagMSG& msg, bool &b);
  TMemoryStream *__fastcall GetAnswerData(void);

};

__fastcall TPostFrm::~TPostFrm(void) //这里不注释掉也出错
{
  //ptmsAnswer->Free();
  //ptmsRequest->Free();
  //pcusHead->Free();
}

调用方式 auto_ptr<TPostFrm> form (new TPostFrm(PostDat,cushead,NULL));


3._di_IXMLDocument 对象是否需要手动释放?
调用方式 _di_IXMLDocument xml = NewXMLDocument();

4.自带Free()方法的对象用delete 安全还是Free()安全?







[解决办法]
前面两个问题没明白你的意思

3._di_IXMLDocument 对象是否需要手动释放? 
调用方式 _di_IXMLDocument xml = New XMLDocument(); 

答:要手动释放

4.自带Free()方法的对象用delete 安全还是Free()安全?

答:Free()安全
[解决办法]
_di_IXMLDocument xml = New XMLDocument();
不需要手动释放

热点排行