C++中什么时候调用副本构造函数初始化一个类对象
来源:互联网 发布:三星mac地址怎么修改 编辑:程序博客网 时间:2024/06/16 11:16
http://blog.sina.com.cn/s/blog_6ab0b9a801019b3h.html
上一篇文章中提到了一种使用副本构造函数初始化类对象的情况,这里也会陈述几种情况。
参考网站:http://www.91tech.net/Article/SoftTech/vctech/200410/118.html
网站上没有陈述上篇文章提到的调用副本构造函数初始类对象的情况外,不过讲解了其他的三种情况:
(1)明确表示由一个对象初始化另一个对象时;//其实这一点可用(2)来理解,本质上相同
(2)当对象作为函数实参传递给函数作形参时;
(3)当对象作为函数值进行返回时。
要创建该对象的“临时副本”(Horton->P252),因此会调用副本构造函数,此时为了防止创建临时类对象
的副本,常向函数传递类对象的“引用”;第三种情况也是正常理解即可,当对象作为返回值时,系统会制
作返回值的“副本”,且系统总会自动制作函数返回值的副本(Horton->P249,P255)。
在该函数的调用结束时析构“临时副本”;第三种情况中当调用return (类对象)时调用副本构造函数创建
了副本,并作为返回值,当该返回值用完后即会调用“析构函数”进行释放内存。
(1)程序仿真验证
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class B
{
private:
public:
};
B Play(B b)
{
}
int main()
{
}
仿真结果:
(2)做些修改探讨一些其他的问题
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class B
{
private:
public:
};
B Play(B b)
{
}
int main()
{
}
注意:若要按照前面调用三次副本构造函数的话则整段程序会调用4次析构函数。
int main()
{
}
(3)对程序又做了一些修改,看看结果如何
在(2)的基础上将main函数修改为
int main()
{
}
结果如下:
(4)再次修改(杂交以上所有的分析)
将(2)中的main函数修改为:
int main()
{
}
输出结果为:
分析:
- C++中什么时候调用副本构造函数初始化一个类对象
- C++中什么时候调用副本构造函数初始化一个类对象
- 什么时候调用拷贝构造函数
- 拷贝构造函数什么时候调用?
- 拷贝构造函数什么时候调用?
- 拷贝构造函数什么时候调用?
- C++:复制构造函数在什么时候被调用?
- C++:复制构造函数在什么时候被调用?
- C++:复制构造函数在什么时候被调用?
- C++:拷贝构造函数在什么时候被调用?
- C++:复制构造函数在什么时候被调用?
- 构造函数初始化类对象
- C++类中一个构造函数调用另一个构造函数
- C++类中一个构造函数调用另一个构造函数
- C++类中一个构造函数调用另一个构造函数
- 当一个类中包含其他类的对象时构造函数的调用顺序
- 子类对象初始化过程中构造函数调用的若干规则
- 子类对象初始化过程中构造函数调用的若干规则
- 机器学习方法:回归(二):稀疏与正则约束ridge regression,Lasso
- REAL210(V6.2)开发板简介
- nyoj.216 A problem is easy【水题】 2015/03/15
- WDCP面板管理升级PHP、MYSQL5.5方法以及错误解决方法
- 【spring框架】动态代理的学习(转)
- C++中什么时候调用副本构造函数初始化一个类对象
- 12124Assemble【二分】
- 如何整合S2SH(二)
- TrustedInstaller管理权限
- 微信飞机大战cocos2dx项目总结之一 菜单场景
- C# IEnumerable 与 IEnumerator
- 【spring框架】利用动态代理实现AOP
- Oracle,mysql,sqlserver,postgresql语句几点比较
- 1020. Tree Traversals (25)