必须通过new运算符在创建对象时才会自动调用什么意思? 5
新手刚学到构造函数,看百度百科时,它对构造函数有一句这样的解释:3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时...
新手刚学到构造函数,看百度百科时,它对构造函数有一句这样的解释:3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的; 小弟不懂!能不能给举一个例子?谢谢了
展开
1个回答
展开全部
类的构造函数在类对象初始化的时候被自动调用,并不一定在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的生命期结束,自动调用类的析构函数。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询