回 帖 发 新 帖 刷新版面

主题:[讨论]帮帮忙啊

#include<iostream>
#include<iomanip>
using namespace std;
class MyClass{
public:
    MyClass(){cout<<'A';}
    MyClass(char c){cout<<c;}
    ~MyClass(){cout<<'B';}
};
int main()
{
    MyClass p1,*p2;
    p2=new MyClass('x');
    delete p2;
    return 0;
}
请告诉我  这个函数的调用顺序   谢谢!

回复列表 (共2个回复)

沙发

当你声明MyClass p1对象时,因为p1不带参数,所以会调用MyClass(){cout<<'A';}来构造p1对象,故输出A;
声明MyClass *p2并不会调用构造函数,因为p2是一枚指针,它没有指向一个对象,故没有输出
p2=new MyClass('x');这句new了一个对象,并且把地址赋值给了p2,因为是用这个MyClass('x')来new的对象,所以会调用MyClass(char c){cout<<c;},故输出x
当你delete p2时调用析构函数~MyClass(){cout<<'B';},故输出B
最后当main函数执行了return 0后,p1的生命周期结束,这时也调用~MyClass(){cout<<'B';}来析构p1,故也输出B

板凳

abcdefghijklmnopqxyz^_~

我来回复

您尚未登录,请登录后再回复。点此登录或注册