小肥羊战队,只因当时太爱你,群众意见范文
对象1.成员变量a = 对象2.成员变量a
如果成员变量a是指针,执行完拷贝构造函数或者*=重载函数**后,对象1和对象2的成员变量就指向了一个地址了,所以当改变对象1的a的值,对象2的a的值也变化了,
而且,如果在析构函数里写了free(a)的话,就相当于对同一个地址free了2次,系统就会在执行时崩溃。
下面的代码断点执行到return 0处,观察s, s1, s2的data成员变量的地址后,发现都指向同一个地址
#include <iostream> #include <string.h> using namespace std; class string{ public: string(const char* str = ""){ if(null == str){ data = (char*)malloc(sizeof(char)); *data = '\0'; } else{ data = (char*)malloc(sizeof(char) * (strlen(str) + 1)); strcpy(data, str); } } ~string(){ free(data); data = null; } char* getdata(){ return data; } private: char *data; }; int main(){ char* a = "abc"; string s(a); string s1(s); string s2; s2 = s; return 0; }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论