美文网首页
第二章(b)可扩充向量错题

第二章(b)可扩充向量错题

作者: 乐音X | 来源:发表于2021-04-30 15:29 被阅读0次

     单选题 (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为非基本类型且有对应的赋值运算符以执行深复制时,前一段代码会调用赋值运算符,而后一段只能进行浅复制。

    浅复制和深复制都是执行复制操作,不同的地方在于,浅复制在复制的过程中遇到指针,是直接复制指针的值(它所指向的数据的地址),而深复制则是在新建立的地址空间中存储该指针指向的数据,并且把新地址的值给新指针。这样的不同之处在于资源的冲突。

    当浅复制的新变量中修改非指针变量(基本类型)时,由于是复制过来的,并不会影响原变量中相应子变量的值;但是当修改引用类型的变量时(指针指向的数据),由于和原指针指向的是一个地址,就会影响原来那个变量内部对应的引用类型变量的值。同时在资源的释放时,当原变量释放了资源,新变量对于基本类型变量的操作不受影响,但是对于引用变量的操作就。。(该地址空间已经被原变量释放了)

    相关文章

      网友评论

          本文标题:第二章(b)可扩充向量错题

          本文链接:https://www.haomeiwen.com/subject/eginrltx.html