混迹于C++之拷贝赋值函数和拷贝构造函数(二)

来源:互联网 发布:刺客信条起源优化好吗 编辑:程序博客网 时间:2024/05/16 07:57
//CopyStruct.h
#ifndef _COPY_STRUCT_H_#define _COPY_STRUCT_H_#include <stdio.h>class AClass{public:    AClass(){}    ~AClass(){}public:   int a;   int b;};//要使用前向声明,必须不对AClass进行操作,所以最好是将成员函数的实现放在cpp文件里//Class AClass;class BClass{public:    BClass()    {        c = 0;        d = 0;        apClass = NULL;//将指针初始化为NULL,杜绝野指针    }    BClass(AClass *pClass)    {        this->apClass = pClass;    }        BClass(const BClass&)//定义新对象,并用已有对象初始化新对象时, 将被调用    {        apClass = new AClass;        printf("Hello world!\n\n");    }        ~BClass()    {        c = 0;        d = 0;    }public:    AClass *apClass;private:    int c;    int d;};#endif 
//CopyStruct.cpp
#include <stdio.h>#include "CopyStruct.h"void Test(BClass *bClass){    BClass *pBClass1 = bClass;    if (pBClass1 != NULL)    {        delete pBClass1;        pBClass1 = NULL;    }}void Test1(AClass *apClass){    AClass *apTmpClass = apClass;     if (apTmpClass != NULL)    {        delete apTmpClass;        apTmpClass = NULL;          }}int main(){    AClass *pAClass = new AClass;    pAClass->a = 2;    pAClass->b = 3;    BClass *pBClass = new BClass(pAClass);    pBClass->apClass->a = 3;    pBClass->apClass->b = 4;    Test(pBClass);//cBClass为一个对象变量指针,分配在堆上,而不是栈上        BClass bTmpClass1;//定义临时对象, 用于调用复制构造函数    BClass bClass = bTmpClass;    Test1(bClass.apClass);    return 0;}
	
				
		
原创粉丝点击