#include <stdio.h>
#include <stdlib.h>
class apple
{
private:
char* pName; //类里面含有指针
public:
apple()
{
printf("helloworld!\n");
pName = NULL;
pName = (char* )malloc(100*sizeof(char));
}
~apple()
{
if(NULL != pName)
{
printf("helloworld!2\n");
free(pName);
pName = NULL;//即使赋值为NULL,也不能阻止出现被释放两次
}
}
};
void process(apple* b)
{
apple* a;
a = b;
printf("abOK!\n");
apple *c,d;//只有一个实例,且申明一个对象指针,指针没有调用构造函数和析构函数,而实例类变变量则会调用析构函数
*c = d;
printf("cdOK!\n");
apple *e,*f;
e = f; //将e的地址覆盖为f的地址,不是实体变量,没事
printf("efOK!\n");
//apple *g, *h;
//*g = *h;//意图引用空指针,段错误
//printf("i,k Now!\n");
//apple i, j;
//i = j; //用实体j初始化i, 使用了浅复制,导致 i分配给pName地址丢失了,无法重新释放回收
apple k;
k = *b; //用valrind检测存在内存泄露!!!
printf("kOK!\n");
}
int main()
{
apple b;
process(&b);
return 0;
}