复写虚构函数或copy函数引发的血案
代码一
#include <stdio.h>
class Person{
public:
Person(){
printf("无参构造\n");
}
int age=0;
// ~Person(){
// printf("虚\n");
// }
};
Person createPerson(){
Person p;
p.age=12;
printf("p=%p,p.age=%p,age=%d\n",&p,&p.age,p.age);
return p;
}
int main(){
Person p=createPerson();
printf("p=%p,p.age=%p,age=%d\n",&p,&p.age,p.age);
return 0;
}
无参构造
p=0x7ffc69ea8940,p.age=0x7ffc69ea8940,age=12
p=0x7ffc69ea8960,p.age=0x7ffc69ea8960,age=12
按 <RETURN> 来关闭窗口...
发现不复写虚构函数的情况下两个对象不一样
代码二
#include <stdio.h>
class Person{
public:
Person(){
printf("无参构造\n");
}
int age=0;
~Person(){
printf("虚\n");
}
};
Person createPerson(){
Person p;
p.age=12;
printf("p=%p,p.age=%p,age=%d\n",&p,&p.age,p.age);
return p;
}
int main(){
Person p=createPerson();
printf("p=%p,p.age=%p,age=%d\n",&p,&p.age,p.age);
return 0;
}
发现复写虚构会导致只有一个对象
无参构造
p=0x7ffd0d307f20,p.age=0x7ffd0d307f20,age=12
p=0x7ffd0d307f20,p.age=0x7ffd0d307f20,age=12
虚
按 <RETURN> 来关闭窗口...
代码三
#include <stdio.h>
class Person{
public:
Person(){
printf("无参构造\n");
}
int age=0;
Person(const Person &person){
printf("copy构造\n");
}
};
Person createPerson(){
Person p;
p.age=12;
printf("p=%p,p.age=%p,age=%d\n",&p,&p.age,p.age);
return p;
}
int main(){
Person p=createPerson();
printf("p=%p,p.age=%p,age=%d\n",&p,&p.age,p.age);
return 0;
}
会发现复写copy函数也会引发一个对象
无参构造
p=0x7ffeb79c1150,p.age=0x7ffeb79c1150,age=12
p=0x7ffeb79c1150,p.age=0x7ffeb79c1150,age=12
按 <RETURN> 来关闭窗口...
不知道为什么!!