成员函数和复制构造函数

时间:2011-12-08 10:40:21

标签: c++ copy-constructor

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

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

3 个答案:

答案 0 :(得分:6)

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

正常成员函数调用在编译时确定。

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

答案 1 :(得分:4)

每个实例的函数没有单独的实例; (非静态)成员函数的特性不是它将为每个实例实例化,而是必须在实例上调用它,并且将隐式地接收指向该实例的指针。没有复制功能。 (实际上,不能复制函数成员或其他内容。)

答案 2 :(得分:0)

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

默认的复制构造函数已经成为成员副本的成员。如果这还不够(浅拷贝< - >深拷贝),则必须提供自己的拷贝构造函数版本,您必须在其中进行所有复制。未能复制成员将使复制的版本保留未定义或默认成员。最好避免通过避免动态内存等来制作自己的复制构造函数。