区分什么时候调用构造函数,复制构造函数和赋值操作符例子
来源:互联网 发布:上海电影频道直播软件 编辑:程序博客网 时间:2024/05/22 11:44
#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()
- 区分什么时候调用构造函数,复制构造函数和赋值操作符例子
- 复制构造函数&&赋值函数(何时调用,什么时候调用)
- 复制构造函数和赋值操作符
- 复制构造函数和赋值操作符
- 复制构造函数和赋值操作符
- 复制构造函数和赋值操作符
- 复制构造函数和赋值操作符
- 构造函数、复制构造函数和赋值操作符的调用
- 拷贝构造函数和赋值操作符operator=分别在什么时候被调用?
- 默认构造函数,复制构造函数,赋值操作符函数,析构函数的调用。
- 默认构造函数、构造函数、复制构造函数和赋值操作符
- 默认构造函数、构造函数、复制构造函数和赋值操作符
- 复制构造函数和赋值构造函数
- 复制构造函数和赋值构造函数
- 复制构造函数和赋值构造函数
- 复制构造函数和赋值构造函数
- 构造函数,复制构造函数与拷贝赋值操作符
- C++构造函数,复制构造函数,赋值操作符
- Microsoft SQL Server 自定义函数整理大全
- 事务的概念
- PHP开源项目
- 禁用屏保和电源管理
- Postgresql 触发器一例
- 区分什么时候调用构造函数,复制构造函数和赋值操作符例子
- 形式化函数(加法)
- JAVA API系列----Hashtable类
- 命令行启动/卸载 Oracle 10 监听和服务
- oracle中case when语法
- 形式化函数(幂次方)
- fork调用,父进程返回子进程的ID,子进程返回0,如果调用失败就返回负数
- 形式化函数(乘法)
- Win32的文件夹遍历方法之递归写法