看下面代码输出
#include <iostream>
#include <string.h>
#include <stdio.h>
class A{
char* data;
public:
A(char* pdata){
int len = strlen(pdata);
data = new char[len+1];
memset(data, 0, len+1);
memcpy(data, pdata, len);
printf("just call me\n");
}
~A(){
if (data){
delete data;
}
}
char* getData(){
return data;
}
};
int main(){
A* pA = new A("test");
A pB = *pA;
delete pA;
printf("hhh %s hhh\n", pB.getData());
}
第二句发生了拷贝构造,其实这道题是考察深拷贝和浅拷贝。拷贝构造时发生了浅拷贝.
我们可以从调试信息看到:
此时pA和pB的data指向同一块内存
数据为"test"
一旦执行了delete pA之后
此时已经指向空了.