复制构造函数-嵌入式实时操作系统uc/os-ii

时间:2021-06-24 01:23:55
【文件属性】:
文件名称:复制构造函数-嵌入式实时操作系统uc/os-ii
文件大小:6.14MB
文件格式:PDF
更新时间:2021-06-24 01:23:55
C++ 9.5 复制构造函数 第 7 章介绍过,对于程序清单 7.1 中的函数 Area( ),传递的实参被复制: double Area(double radius); 因此,调用 Area( )时,实参被复制给形参 radius。这种规则也适用于对象(类的实例)。 9.5.1 浅复制及其存在的问题 程序清单 9.7 所示的 MyString 类包含一个指针成员 buffer,它指向动态分配的内存(这些内存是 在构造函数中使用 new 分配的,并在析构函数中使用 delete[]进行释放)。复制这个类的对象时,将复 制其指针成员,但不复制指针指向的缓冲区,其结果是两个对象指向同一块动态分配的内存。销毁其 中一个对象时,delete[]释放这个内存块,导致另一个对象存储的指针拷贝无效。这种复制被称为浅复 制,会威胁程序的稳定性,如程序清单 9.8 所示。 程序清单 9.8 按值传递类(如 MyString)的对象带来的问题 0: #include 1: #include 2: using namespace std; 3: class MyString 4: { 5: private: 6: char* buffer; 7: 8: public: 9: MyString(const char* initString) // Constructor 10: { 11: buffer = NULL; 12: if(initString != NULL) 13: { 14: buffer = new char [strlen(initString) + 1]; 15: strcpy(buffer, initString); 16: }

网友评论