区分什么时候调用构造函数,构造函数什么时候调用,什么时候程序会调用其构造函数,构造函数什么时候被调用,构造函数在什么时候被调用,java构造函数在什么时候被调用,构造函数在什么时候调用,c 什么时候调用构造函数,复制构造函数什么时候被调用,什么时候调用默认构造函数#include<iostream>
#include<vector>
using namespace std;
struct Exmp1{
//默认构造函数
Exmp1()
{
cout<<"Exmp1()"<<endl;
}
//复制构造函数
Exmp1(const Exmp1&)
{
cout<<"Exmp1(const Exmp1&)"<<endl;
}
//赋值操作符
Exmp1&operator=(const Exmp1 &rhe)
{
cout<<"operator = (const Exmp1&)"<<endl;
return *this;
}
//析构函数
~Exmp1()
{
cout<<"~Exmp1()"<<endl;
}
};
void func1(Exmp1 obj) //形参为Exmp1对象
{
}
void func2(Exmp1&obj) //形参为Exmp1对象的引用
{
}
Exmp1 func3()
{
Exmp1 obj;
return obj; //返回Exmp1对象
}
int main()
{
Exmp1 eobj; //调用默认构造函数创建Exmp1对象eobj;
func1(eobj); //调用复制构造函数
//将形参Exmp1对象创建为实参Exmp1对象的副本
//函数执行完毕后调用析构函数撤销形参Exmp1对象
func2(eobj); //形参为Exmp1对象的引用,无需调用复制构造函数传递实参
eobj=func3(); //调用默认构造函数创建局部Exmp1对象
//函数返回时调用复制构造函数创建作为返回值副本的Exmp1对象
//然后调用析构函数撤销局部Exmp1对象
//然后调用赋值操作符
//执行完赋值操作后,调用析构函数撤销作为返回值副本的Exmp1对象
Exmp1 *p=new Exmp1; //调用默认构造函数动态创建Eamp1对象
vector<Exmp1> evec(3); //调用默认构造函数,创建一个临时对象值Eamp1对象
//然后3次调用复制构造函数,将临时值Eamp1对象复制到vector容器evec的每个元素
//然后调用析构函数撤销临时值Eamp1对象
delete p; //调用析构函数撤销动态创建的Eamp1对象
return 0; //evec及eobj生命周期结束,自动调用析构函数撤销
//撤销evec需调用析构函数3次
}
运行结果:
Exmp1()
Exmp1(const Exmp1&)
~Exmp1()
Exmp1()
Exmp1(const Exmp1&)
~Exmp1()
operator = (const Exmp1&)
~Exmp1()
Exmp1()
Exmp1()
Exmp1(const Exmp1&)
Exmp1(const Exmp1&)
Exmp1(const Exmp1&)
~Exmp1()
~Exmp1()
~Exmp1()
~Exmp1()
~Exmp1()
~Exmp1()
1.
区分什么时候调用构造函数 来自淘豆网m.daumloan.com转载请标明出处.