关于无名对象(转载)
来源:互联网 发布:宇宙有多大 知乎 编辑:程序博客网 时间:2024/05/16 01:42
#include <iostream>
using namespace std;
class Internet
{
public:
Internet(char *name,char *address)
{
cout<<"载入构造函数"<<endl;
strcpy(Internet::name,name);
}
Internet(Internet &temp)
{
cout<<"载入COPY构造函数"<<endl;
strcpy(Internet::name,temp.name);
cin.get();
}
~Internet()
{
cout<<"载入析构函数!";
}
public:
char name[20];
char address[20];
};
void main()
{
Internet a=Internet("中国软件开发实验室","www.cndev-lab.com");
cout<<a.name;
cin.get();
}
从思维逻辑上说,当无名对象创建了后,是应该调用自定义拷贝构造函数,或者是默认拷贝构造函数来完成复制过程的,但事实上系统并没有这么做,因为无名对象使用过后在整个程序中就失去了作用,对于这种情况c++会把代码看成是:
Internet a("中国软件开发实验室",www.cndev-lab.com);
省略了创建无名对象这一过程,所以说不会调用拷贝构造函数。
#include <iostream>
using namespace std;
class Internet
{
public:
Internet(char *name,char *address)
{
cout<<"载入构造函数"<<endl;
strcpy(Internet::name,name);
}
Internet(Internet &temp)
{
cout<<"载入COPY构造函数"<<endl;
strcpy(Internet::name,temp.name);
cin.get();
}
~Internet()
{
cout<<"载入析构函数!";
}
public:
char name[20];
char address[20];
};
void main()
{
Internet &a=Internet("中国软件开发实验室","www.cndev-lab.com");
cout<<a.name;
cin.get();
}
引用本身是对象的别名,和复制并没有关系,所以不会调用拷贝构造函数,但要注意的是,在c++看来:
Internet &a=Internet("中国软件开发实验室","www.cndev-lab.com");
是等价于:
Internet a("中国软件开发实验室","www.cndev-lab.com");
的,注意观察调用析构函数的位置(这种情况是在main()外调用,而无名对象本身是在main()内析构的)。
总结:无名对象最大的好处在于对象初始化的时候,不会调用拷贝构造函数。对于比较大的对象实体可以采用这样的方式进行初始化,是一种好的编程习惯。
文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppjs/20090303/157257_2.html)
文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppjs/20090303/157257.html)
- 关于无名对象(转载)
- 关于C++ 的无名对象
- 无名对象
- 无名对象
- 无名对象
- 关于无名对象用作构造函数参数的例子
- 无名临时对象
- C++ 无名对象
- 一个无名对象问题
- C++ 无名对象
- C++ 无名对象
- 无名对象的作用
- 无名
- 无名
- 无名
- 无名
- 无名
- 无名
- 有序的双向链表实现
- PM谈判心得4 - 借力打力,四两拨千斤
- C#实现插件式架构
- QQ空间游戏基地刷分0821更新版
- 我的图片
- 关于无名对象(转载)
- 当程序员转行去做销售
- NT
- 突变测试
- Ehcache -- ehcache.xml
- Mutation testing
- 避免使用JavaScript动态导航条的7大理由
- 美容美发管理系统方案
- C语言字符串函数