• 联系我们
  • 地址:湖北武汉三环科技园
  • 电话:159116031100
  • 传真:027-68834628
  • 邮箱:mmheng@foxmail.com
  • 当前所在位置:首页 - c++培训
  • C语言中何时调用复制构造函数c语言
  •   在C++中,只有单个形参,而且该类型是对本类类型的引用(常用const修饰),这样的构造函数称为复制构造函数。

      复制构造函数既可以自己定义又可以像默认构造函数一样被编译器隐式调用。但大多数时候,特别是类中有指针的时候要实现深复制,避免浅复制时,就需要自己定义复制构造函数。

      那么我们定义的复制构造函数什么时候调用呢,总结起来,有如下五种情况,下面分别举例说明。

      一、根据一个同类型对象显示或隐式初始化一个对象。

      例如:

      string str1 = “123456”;//copy-initialization

      string str2(str1);//copy-initialization

      string str3(10, 1‘);//direct-initialization

      用“=”时,都是采用复制构造函数,具体过程是先用相应构造函数创建临时对象,然后采用copy构造复制过去。

      二、复制一个对象将它作为实参传给一个函数。

      例如:

      class A{

      };

      A f(A a)

      {

      return a;

      }

      a作为非引用实参传递给函数f,形参a将被初始化为实参的一个副本,这时调用copy构造。

      三、从函数返回时复制一个对象。

      例如:

      class A{

      };

      A f(A a)

      {

      return a;

      }

      跟上例一样,但这次要说的是返回值,因为返回的引用,所以要将a复制一份返回,所以此时也调用copy构造。

      四、初始化顺序容器中的元素。

      我们知道,容器中元素的初始化都是复制初始化,所以不能复制的对象是不可以存到容器中的,例如io对象。

      既然是复制,那么将一个类对象放入容器中的时候就会调用copy构造。

      例如:

      在如今这个信息爆炸的时代里,每天都会有数不清的新闻通过各种渠道涌到我们面前,而真正有价值的应该进入我们心里的,却很可能随着日历牌的翻动被我们忽略。作为对一周新闻进行回顾的《比特网新闻中心每周热点推荐》,就是要告诉您过去的七天都发生了哪些新闻,更希望和您一起,站在七天的高度来看待过去一周的新闻

      业内首个只为报道数据中心资讯内容的专业频道,是为数据中心用户及厂商而建设的专业平台。以数据中心专业技术内容为核心,贯穿新鲜资讯、技巧方法和用户案例等高附加值内容。以为网友提供最具实用价值的信息为原则,以成为用户最信赖的行业专家为目标,打造高时效、高品质、高前瞻的最全威频道。企业数据中心热点播报,为您精心奉上过去一周数据中心最精彩、权威资讯_chinabyte比特网。

      就服务器和数据中心领域的产业动态、技术热点、热产品、实用技巧,向企业CIO/CTO、IT管理层、技术人员提供一周精选套餐,为数据中心决策者、使用者提供一份服务器行业以及数据中心领域最新动态及产品应用的技术套餐。

      在C++中,只有单个形参,而且该类型是对本类类型的引用(常用const修饰),这样的构造函数称为复制构造函数。

      复制构造函数既可以自己定义又可以像默认构造函数一样被编译器隐式调用。但大多数时候,特别是类中有指针的时候要实现深复制,避免浅复制时,就需要自己定义复制构造函数。

      那么我们定义的复制构造函数什么时候调用呢,总结起来,有如下五种情况,下面分别举例说明。

      一、根据一个同类型对象显示或隐式初始化一个对象。

      例如:

      string str1 = “”;//copy-initialization

      string str2(str1);//copy-initialization

      string str3(10, 1‘);//direct-initialization

      用“=”时,都是采用复制构造函数,具体过程是先用相应构造函数创建临时对象,然后采用copy构造复制过去。

      二、复制一个对象将它作为实参传给一个函数。

      例如:

      class A{

      };

      A f(A a)

      {

      return a;

      }

      a作为非引用实参传递给函数f,形参a将被初始化为实参的一个副本,这时调用copy构造。

      三、从函数返回时复制一个对象。

      例如:

      class A{

      };

      A f(A a)

      {

      return a;

      }

      跟上例一样,但这次要说的是返回值,因为返回的引用,所以要将a复制一份返回,所以此时也调用copy构造。

      四、初始化顺序容器中的元素。

      我们知道,容器中元素的初始化都是复制初始化,所以不能复制的对象是不可以存到容器中的,例如io对象。

      既然是复制,那么将一个类对象放入容器中的时候就会调用copy构造。

      例如:

      在如今这个信息爆炸的时代里,每天都会有数不清的新闻通过各种渠道涌到我们面前,而真正有价值的应该进入我们心里的,却很可能随着日历牌的翻动被我们忽略。作为对一周新闻进行回顾的《比特网新闻中心每周热点推荐》,就是要告诉您过去的七天都发生了哪些新闻,更希望和您一起,站在七天的高度来看待过去一周的新闻

      业内首个只为报道数据中心资讯内容的专业频道,是为数据中心用户及厂商而建设的专业平台。以数据中心专业技术内容为核心,贯穿新鲜资讯、技巧方法和用户案例等高附加值内容。以为网友提供最具实用价值的信息为原则,以成为用户最信赖的行业专家为目标,打造高时效、高品质、高前瞻的最全威频道。企业数据中心热点播报,为您精心奉上过去一周数据中心最精彩、权威资讯_chinabyte比特网。

      就服务器和数据中心领域的产业动态、技术热点、热产品、实用技巧,向企业CIO/CTO、IT管理层、技术人员提供一周精选套餐,为数据中心决策者、使用者提供一份服务器行业以及数据中心领域最新动态及产品应用的技术套餐。