单选题 (1分)
Is it possible to replace:是否可以将视频里向量扩容代码中的:
for (int i = 0; i < _size; i++) _elem[i] = oldElem[i];
in the vector expansion code in the video with: 替代为:
memcpy(_elem, oldElem, _size * sizeof(T));
P.S.This question involves the relevant knowledge of C++ P.S.本题涉及C++的相关知识
解析:
When T is a non-base type and there is a corresponding assignment operator to perform deep copy, the previous section of code calls the assignment operator, and the latter section can only perform shallow copy. 当T为非基本类型且有对应的赋值运算符以执行深复制时,前一段代码会调用赋值运算符,而后一段只能进行浅复制。
浅复制和深复制都是执行复制操作,不同的地方在于,浅复制在复制的过程中遇到指针,是直接复制指针的值(它所指向的数据的地址),而深复制则是在新建立的地址空间中存储该指针指向的数据,并且把新地址的值给新指针。这样的不同之处在于资源的冲突。
当浅复制的新变量中修改非指针变量(基本类型)时,由于是复制过来的,并不会影响原变量中相应子变量的值;但是当修改引用类型的变量时(指针指向的数据),由于和原指针指向的是一个地址,就会影响原来那个变量内部对应的引用类型变量的值。同时在资源的释放时,当原变量释放了资源,新变量对于基本类型变量的操作不受影响,但是对于引用变量的操作就。。(该地址空间已经被原变量释放了)
网友评论