posts - 134,comments - 22,trackbacks - 0
          http://www.devx.com/tips/Tip/13625

          Deep Copy and Shallow Copy
          The terms "deep copy" and "shallow copy" refer to the way objects are copied, for example, during the invocation of a copy constructor or assignment operator. In a deep copy (also called "memberwise copy"), the copy operation respects object semantics. For example, copying an object that has a member of type std::string ensures that the corresponding std::string in the target object is copy-constructed by the copy constructor of class std::string.
           
          class A
          {
          string s;
          };
          A a;
          A b;
          a=b; //deep copy

          When assigning b to a, the compiler-generated assignment operator of class A first invokes the assignment operator of class std::string. Thus, a.s and b.s are well-defined, and they are probably not binary-identical. On the other hand, a shallow copy (also called "bitwise copy") simply copies chunks of memory from one location to another. A memcpy() operation is an example of a shallow copy. Because memcpy() does not respect object semantics, it will not invoke the copy constructor of an object. Therefore, you should never use memcpy() to copy objects. Use it only when copying POD (Plain Old Data) types: ints, floating point numbers, and dumb structs.

          --------------------------------------------------------------------

          http://www.uow.edu.au/~lukes/TEXTBOOK/notes-cpp/oop-condestructors/shallowdeepcopy.html

          A shallow copy of an object copies all of the member field values. This works well if the fields are values, but may not be what you want for fields that point to dynamically allocated memory. The pointer will be copied. but the memory it points to will not be copied -- the field in both the original object and the copy will then point to the same dynamically allocated memory, which is not usually what you want. The default copy constructor and assignment operator make shallow copies.

          A deep copy copies all fields, and makes copies of dynamically allocated memory pointed to by the fields. To make a deep copy, you must write a copy constructor and overload the assignment operator, otherwise the copy will point to the original, with disasterous consequences.

           原文地址 http://www.uow.edu.au/~lukes/TEXTBOOK/notes-cpp/oop-condestructors/shallowdeepcopy.html
          posted on 2009-12-10 15:44 何克勤 閱讀(218) 評論(0)  編輯  收藏 所屬分類: C/C++
          主站蜘蛛池模板: 林甸县| 东乡县| 巴林左旗| 乌鲁木齐市| 宁陵县| 浏阳市| 手机| 文昌市| 沙湾县| 兴和县| 大同县| 苏尼特左旗| 高邮市| 大石桥市| 乐安县| 绥滨县| 广德县| 长葛市| 济源市| 桐乡市| 灌南县| 普洱| 嘉定区| 阜康市| 长寿区| 武川县| 太保市| 贺州市| 高清| 江油市| 石河子市| 乐业县| 湟中县| 来安县| 尖扎县| 家居| 潞城市| 正蓝旗| 开原市| 图们市| 灌云县|