读书人

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

发布时间: 2012-03-13 11:21:11 作者: rapoo

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

读书人网 >C++ Builder

热点推荐