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

函数通过型参传递类的析构有关问题

2012-06-01 
函数通过型参传递类的析构问题各位大牛,请教一个关于类作为型参传递进函数后析构与构造的问题://*********

函数通过型参传递类的析构问题
各位大牛,请教一个关于类作为型参传递进函数后析构与构造的问题:
//*****************************************************//
int _tmain(int argc, _TCHAR* argv[])
{
CTest TestClass;

GetClass(TestClass);
printf_s("%d",TestClass.nC);

return 0;
}
TestClass 是在_tmain函数中定义的,生命周期应该在整个_tmain函数中,
但是在调用GetClass函数后,并未重新生成一个CTest类型对象,而是直接
引用的TestClass,GetClass函数结束析构TestClass,而不是_tmain结束后
析构TestClass。
请问这是为什么!
//*****************************************************//



class CTest
{
public:
CTest()
{
nA=0;
nB=1;
nC=4;
lpszStr=(char **)malloc(sizeof(char *)*nC);
for (nA=0;nA<nC;nA++)
{
lpszStr[nA]=(char *)malloc(sizeof(char)*133);
sprintf_s(lpszStr[nA],133,"%d",nA);
}
}
~CTest()
{
nA=0;
nB=1;
nC=4;

for (nA=0;nA<nC;nA++)
{
free(lpszStr[nA]);
}
free(lpszStr);
}
char **lpszStr;
int nA;
int nB;
int nC;
};

int GetClass(CTest oldClass);

int _tmain(int argc, _TCHAR* argv[])
{
CTest TestClass;

GetClass(TestClass);
printf_s("%d",TestClass.nC);

return 0;
}

int GetClass(CTest oldClass)
{
return 0;
}



[解决办法]

C/C++ code
#include <stdio.h>#include <stdlib.h>#include <string.h>class CTest{    public:        CTest()        {            printf("in ctor\n");            nA=0;            nB=1;            nC=4;            lpszStr=(char **)malloc(sizeof(char *)*nC);            for (nA=0;nA<nC;nA++)            {                lpszStr[nA]=(char *)malloc(sizeof(char)*133);                snprintf(lpszStr[nA],133,"%d",nA);            }        }        CTest(const CTest &e)        {            printf("in copy ctor\n");            int index = 0;            this->nA = e.nA;            this->nB = e.nB;            this->nC = e.nC;            lpszStr=(char **)malloc(sizeof(char *)*nC);            for( ; index < this->nC ; ++index )            {                lpszStr[index] = (char *)malloc(sizeof(char)*133);                strncpy(lpszStr[index],e.lpszStr[index],133);            }        }        CTest & operator=(const CTest &e)        {            int index = 0;            if( this == &e)            {                return *this;            }            this->nA = e.nA;            this->nB = e.nB;            this->nC = e.nC;            lpszStr=(char **)malloc(sizeof(char *)*nC);            for(index = 0; index < this->nC; index++)            {                lpszStr[index] = (char *)malloc(sizeof(char)*133);                strncpy(lpszStr[index],e.lpszStr[index],133);            }                        return *this;        }        ~CTest()        {            char **pp = lpszStr;            printf("in dector\n");            for ( nA =0 ; nA < nC;nA++)            {                char *p = pp[nA];                free(p);                p = NULL;            }            free(pp);            lpszStr = NULL;        }        char **lpszStr;        int nA;        int nB;        int nC;};int GetClass(CTest oldClass);int main(int argc, char * argv[]){    CTest TestClass;    GetClass(TestClass);//    printf("%d",TestClass.nC);    return 0;}int GetClass(CTest oldClass){    return 0;} 

热点排行