seekting2013 2019-01-05 14:28 采纳率: 0%
浏览 408

复写虚构函数或copy函数引发的血案

复写虚构函数或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> 来关闭窗口...


不知道为什么!!

展开全部

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 08:26
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论
编辑
预览

报告相同问题?