函数通过型参传递类的析构有关问题
函数通过型参传递类的析构问题
各位大牛,请教一个关于类作为型参传递进函数后析构与构造的问题:
//*****************************************************//
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;
}
------解决方案--------------------
各位大牛,请教一个关于类作为型参传递进函数后析构与构造的问题:
//*****************************************************//
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; }