成员函数和复制构造函数

member functions and the copy constructor

本文关键字:构造函数 复制 函数 成员      更新时间:2023-10-16

您必须在复制构造函数中显式列出要复制的所有成员,这意味着您可以设置复制构造函数来复制对象的精简版本。

但是成员函数是如何复制的呢?是否自动包含所有成员函数?这是因为对象实际上只是成员,而函数只是声明如何使用类吗?这是否意味着理论上你可以用复制构造函数创建精简对象,然后,例如,调用getter来获取副本中不存在的成员?

成员函数不存储在类实例中。它们只是常规函数。可存储虚表指针。它用于动态分派虚成员函数。

普通成员函数调用在编译时确定。

(作为旁注,有一些语言确实每个实例存储方法的副本,尽管c++不是其中之一)

函数没有单独的实例;(非静态)成员函数的特点不是它将为每个实例实例化,而是必须在实例上调用它,并且将隐式地接收一个指向实例的指针。没有函数的复制。(实际上,function —member或else —是不能复制的。)

对于c++中的类/对象可能存在误解。在某些语言中(例如python),对象可以改变(新的变量/函数);在c++中,对象是静态的,就像在类中指定的那样,所以不能有对象的缩小版本。

默认复制构造函数已经进行了成员到成员的复制。如果这还不够(浅拷贝<->深拷贝),您必须提供自己版本的拷贝构造函数,在这个构造函数中您必须完成所有的拷贝。未能复制成员将使复制的版本具有未定义或默认成员。通过避免动态内存之类的东西,最好避免创建自己的复制构造函数。