#include<stdio.h>
#include<string.h>
class simpleClass {
private:
char *m_buf;
size_t m_nSize;
int *m_count;
public:
simpleClass(size_t n=1) {
m_buf=new char[n];
m_nSize=n;
m_count=new int;
*m_count=1;
printf("count is:%d\n",*m_count);
};
simpleClass(const simpleClass &s){
m_nSize=s.m_nSize;
m_buf=s.m_buf;
m_count=s.m_count;
(*m_count)++;
printf("count is:%d\n",*m_count);
};
/*
simpleClass& operator=(const simpleClass &s) //代码片段二
{
if(m_buf==s.m_buf)
return *this;
(*m_count)--;
if(*m_count==0)
{
printf("%d is deleted at %xd\n",m_nSize,m_buf);
delete[] m_buf;
delete m_count;
}
m_buf=s.m_buf;
m_nSize=s.m_nSize;
m_count=s.m_count;
(*m_count)++;
};
*/
~simpleClass(){
(*m_count)--;
printf("count is:%d\n",*m_count);
if(*m_count==0)
{
printf("%d is deleted at %xd\n",m_nSize,m_buf);
delete[] m_buf;
delete m_count;
}
};
char *GetBuf(){
return m_buf;
};
};
void foo()
{
simpleClass a(10);
char *p=a.GetBuf();
strcpy(p,"hello");
printf("%s\n",p);
simpleClass b=a;
/*
simpleClass c(20); //代码片段一
c=a;
*/
printf("b=%s\n",b.GetBuf());
}
int main()
{
foo();
printf("exit main()...\n");
}
将代码片段一去掉注释,程序出现内存泄露,将代码片段二去掉注释,内存泄漏的问题得到解决。
***创建内存时,初始化指针指向它,当指针不再指向它时,内存应该被销毁***