混迹于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;}