#include<iostream>
#include<vector>
using namespace std;
class Exmpl
{
public:
//默认构造函数
Exmpl()
{
cout << "Exmpl()" << endl;
}
//复制构造函数
Exmpl (const Exmpl&)
{
cout << "Exmpl(const&)" << endl;
}
//赋值操作符
Exmpl& operator = (const Exmpl &abc)
{
cout << "operator = (const Exmpl&)" << endl;
return *this;
}
//析构函数
~Exmpl()
{
cout << "~Exmpl()" << endl;
}
};
void func1(Exmpl obj)
{
}
void func2(Exmpl& obj)
{
}
Exmpl func3()
{
Exmpl obj;
return obj; //返回Exmpl对象
}
int main()
{
Exmpl cobj;//调用默认构造函数创建Exmpl对象cobj
func1(cobj);//调用复制构造函数
//将形参Exmpl对象创建为实参Exmpl对象的副本
//函数执行完毕后调用析构函数撤销形参的Exmpl对象
func2(cobj); //形参为Exmpl对象的引用,无需调用复制构造函数传递实参
cobj = func3(); //调用默认构造函数创建局部Exmpl对象
//函数返回时调用复制构造函数创建作为返回值副本的Exmpl对象
//然后调用析构函数撤销局部Exmpl对象
//然后调用赋值操作符
//执行完赋值操作后, 调用析构函数撤销作为返回值副本的Exmpl对象
Exmpl *p = new Exmpl;// 调用默认构造函数动态创建Exmpl对象
vector<Exmpl> evec(3);//调用默认构造函数
//创建一个临时值Exmpl对象
//然后3次调用复制构造函数
//将临时值Exmpl对象复制到
//vector容器ever的每个元素
//然后调用析构函数撤销临时值Exmpl对象
delete p;//调用析构函数撤销动态创建的Exmpl对象
//evec及cobj生命期结束自动调用析构函数撤销
//撤销evec需要调用析构函数3次因为evec有三个元素
return 0;
}
本文详细解析了C++中不同类型的构造函数(包括默认构造函数、复制构造函数)和析构函数的作用机制,同时介绍了如何通过这些机制管理对象的生命周期,并探讨了在函数调用、对象复制和赋值过程中的具体应用。

被折叠的 条评论
为什么被折叠?



