请教关于内存释放的问题一大堆.....
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();
不需要手动释放