必须通过new运算符在创建对象时才会自动调用什么意思? 5

新手刚学到构造函数,看百度百科时,它对构造函数有一句这样的解释:3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时... 新手刚学到构造函数,看百度百科时,它对构造函数有一句这样的解释:3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的; 小弟不懂!能不能给举一个例子?谢谢了 展开
 我来答
拥云庄主
2014-12-19 · TA获得超过2505个赞
知道小有建树答主
回答量:672
采纳率:100%
帮助的人:424万
展开全部

类的构造函数在类对象初始化的时候被自动调用,并不一定在new的时候才会被调用,因为new运算符会自动调用类的警告函数,如果类之间存在继承关系,则先调用父类构造,再调用子类构造。

而析构函数则在类对象被销毁,或者说生命期结束的时候被调用,如果类之间存在继续关系,则先调用子类析构函数,再调用父类析构函数。在使用delete运算符释放内存时,会自动调用析构函数。可以看下我下面写的示例代码:

#include <iostream>
using namespace std;
class MyClass
{
public:
    MyClass(int iFlag)//构造函数,会在对象初始化的时候被自动调用
    {
        m_Flag = iFlag;
        cout<<"The "<<iFlag<<" Constructor called."<<endl;
    }
    ~MyClass()//析构函数,会在对象被销毁的时候被调用
    {
        cout<<"The "<<m_Flag<<" Destructor called."<<endl;
    }
protected:
private:
    int m_Flag;//类对象标记
};
int main(void)
{
    //定义一个局部类对象,当main函数结束的时候会自动调用析构函数
    MyClass myObj(1);
    //使用new动态分配一个类对象,如果不手动释放,系统将不会自动释放
    //也就是说会有内存泄漏
    MyClass *pObj = new MyClass(2);
    //使用delete运算符时会自动调用析构函数
    delete pObj;
    return 0;
}

测试截图:

可以看到,标识为1,2的对象都调用的构造函数。而析构函数是2的先执行,1的后执行,这是因为,我们使用delete运算符手动释放2的内存,所以,先执行它的析构函数,而1的析构函数在main函数退出之前调用,这时对象1的生命期结束,自动调用类的析构函数。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式