标题:【析构函数写法】如何使用析构函数释放类成员函数申请的堆内存
环境:win7 64位/AMD CPU/C++ GCC4.7.2/Codeblocks
详细描述:如下所示”代码块1“,每次在调用encrypt()函数时均会申请一次内存,如何在析构函数中一次性销毁所有产生的内存,”代码块2“的方法不符合要求
扩展:如果上述问题无较好答案,是否有其他方法可以避免在类函数中使用new,但也能达到目的
代码块1:
#include <iostream>
#include <string.h>
using namespace std;
class cipher
{
public:
char key[128];
cipher(const char *key_)
{
strcpy(key,key_);
}
char* encrypt(const char* text)
{
int a= (int((strlen(text)/128)+1))*128;
//每运行一次则产生一个新内存
char *tempResult=new char[a];
strcpy(tempResult,text);
strcat(tempResult,key);
return tempResult;
}
~cipher()
{
}
};
int main()
{
const char* myKey="this is a key";
cipher encryptBook(myKey);
const char* engilishBookContent="this is the content of the English book.";
cout<<encryptBook.encrypt(engilishBookContent)<<endl;
const char* chineseBookContent="this is the content of the Chinese book.";
cout<<encryptBook.encrypt(chineseBookContent)<<endl;
}
代码块2:
class cipher
{
public:
char key[128];
char *tempResult;
cipher(const char *key_)
{
strcpy(key,key_);
tempResult = null;
}
char* encrypt(const char* text)
{
int a= (int((strlen(text)/128)+1))*128;
if(tempResult != null){delete [] tempResult ;tempResult = null;}
tempResult=new char[a];
strcpy(tempResult,text);
strcat(tempResult,key);
return tempResult;
}
~cipher()
{
if(tempResult != null){delete [] tempResult ;tempResult = null;}
}
};