首页 > 试题广场 >

关于“深拷贝”,下列说法正确的是:

[单选题]

关于深拷贝,下列说法正确的是:

  • 会拷贝动态分配的成员对象
  • 会拷贝成员数据的值
  • 会拷贝静态分配的成员对象
  • B和C都对
推荐
选A。
B和C都算错在了一个地方,没有考虑静态成员。类的静态成员是所有类的实例共有的,存储在全局(静态)区,只此一份,不管继承、实例化还是拷贝都是一份。
B中,静态成员属于成员数据,而C中,静态成员和局部成员都是静态分配的(与动态分配对应),因此B和C中都包含了静态成员,所以不正确。
因此,D也不正确。
编辑于 2016-01-13 12:30:08 回复(0)
深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。
浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个对象的改动都会影响另外一个对象。
发表于 2015-08-11 11:06:20 回复(2)
拷贝分为浅拷贝和深拷贝。浅拷贝只是建立原来对象的引用,并不拷贝数据;深拷贝是新建一个对象,把原来对象的数据复制过来。但是有一点要注意,对含有静态成员数据的对象,静态成员属于类,被所有对象共享,所以深拷贝也不会拷贝这一份数据。只会拷贝非静态成员数据。
发表于 2017-03-22 22:34:52 回复(0)
感觉B答案是不是因为没有区分成员数据,成员数据分为静态成员和非静态成员。深拷贝只是拷贝非静态成员数据。
发表于 2015-08-19 10:12:08 回复(0)
静态成员的数据只有一份为大家共享,所以不能深拷贝
发表于 2015-08-11 15:39:05 回复(0)
浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个对象的改动都会影响另外一个对象。   深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。 深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。
发表于 2017-05-18 21:18:27 回复(2)
浅拷贝时如果构造函数里面有指针,会使新的类对象内的指针也指向旧的那个对象的指针所指向对象,容易出现野指针的现象。
深拷贝好,记得重新分配指针指向的内存。
静态数据在拷贝构造函数时不会被重新分配。
发表于 2016-01-12 20:55:13 回复(0)
记得浅拷贝是只拷贝指针,不拷贝指针所指的值,深拷贝是两者都拷贝
发表于 2015-08-07 21:31:25 回复(2)

深拷贝和浅拷贝都是指针或引用类型数据的复制方式。

浅拷贝,又称为地址拷贝,只是复制了指针或引用的地址,多个对象指向同一块内存空间,这样在一个对象中对这个内存空间进行改变时,其余的对象也会受到影响。例如,当我们定义一个类并使用浅拷贝时,如果两个类对象有指针成员,则它们将共享相同的地址,当其中一个对象释放了这段内存,另一个对象中的指针成员将指向已释放的内存,从而导致错误。因此,在包含指针或动态内存分配的类中,使用浅拷贝可能会导致不可预期的结果。

深拷贝,是指将指针或引用所指向的实际内容全部复制一份到新的内存地址中,多个对象之间的指针指向不同的内存地址,每个对象都有自己的一份数据拷贝,互相之间不会影响。例如,在包含指针或动态内存分配的类中,使用深拷贝可以确保每个对象都有自己的一份内存,互相之间不会发生冲突。


发表于 2023-10-19 16:48:40 回复(1)
无论是深拷贝还是浅拷贝,静态成员都只有一份,不会被拷贝,B和C都是没有考虑静态成员的情况
发表于 2021-03-22 09:19:38 回复(0)
考察的太细了
发表于 2017-09-02 20:09:27 回复(0)
浅拷贝是“按字节复制”,如果有指针,只是把指针保存的地址复制过来,而且默认拷贝函数就是浅拷贝,深拷贝要自己写,不是把指针复制过来,而是new一块新的内存,把指针指向的内容复制到新内存中
发表于 2023-08-21 16:09:04 回复(0)
b怎么错了
发表于 2023-04-07 14:05:34 回复(0)
静态成员在拷贝构造函数不会被重新分配,类的静态成员是所有类的实例共有的,存储在静态区,就一份数据的副本。
发表于 2023-02-26 22:13:17 回复(0)
B选项,深拷贝不会拷贝指针的值
发表于 2020-07-30 15:26:48 回复(0)
题意是现在有一个类A和其实例化的对象a,需要用类A的对象b去深拷贝a。b只能拷贝a中非静态成员。因为静态成员是类共享的
发表于 2020-06-02 17:10:31 回复(0)
深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。
浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个对象的改动都会影响另外一个对象。
发表于 2020-05-24 20:49:04 回复(0)
在深拷贝中,类的静态数据成员是不拷贝的,故BCD均错,选A。
发表于 2018-11-26 23:05:54 回复(0)
动态分配是程序员自己分配的,即new malloc
发表于 2018-08-09 00:44:58 回复(0)
深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。
浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个对象的改动都会影响另外一个对象。
发表于 2018-05-30 09:29:05 回复(0)
类的静态成员是所有类的实例共有的,存储在全局(静态)区,只此一份,不管继承、实例化还是拷贝都是一份。
发表于 2017-09-04 15:35:29 回复(0)