Hướng dẫn shallow copy và deep copy c++ - bản sao cạn và bản sao sâu c ++
Nói chung, việc tạo một bản sao của một đối tượng có nghĩa là để tạo một bản sao chính xác của đối tượng có cùng giá trị, kiểu dữ liệu và tài nguyên.
Tùy thuộc vào các tài nguyên như bộ nhớ động được giữ bởi đối tượng, chúng ta cần thực hiện bản sao nông hoặc sao chép sâu để tạo bản sao của đối tượng. Nói chung, nếu các biến của một đối tượng đã được phân bổ động, thì bắt buộc phải thực hiện một bản sao sâu để tạo một bản sao của đối tượng.Shallow Copy or Deep Copy in order to create a replica of the object. In general, if the variables of an object have been dynamically allocated, then it is required to do a Deep Copy in order to create a copy of the object. Bản sao nông:Trong bản sao nông, một đối tượng được tạo bằng cách sao chép dữ liệu của tất cả các biến của đối tượng gốc. Điều này hoạt động tốt nếu không có biến nào của đối tượng được xác định trong phần HEAP của bộ nhớ. & NBSP; và lỗi thời gian chạy, con trỏ lủng lẳng. Vì cả hai đối tượng sẽ tham chiếu đến cùng một vị trí bộ nhớ, nên sự thay đổi được thực hiện bởi một người cũng sẽ phản ánh những thay đổi đó trong một đối tượng khác. Vì chúng tôi muốn tạo một bản sao của đối tượng, mục đích này sẽ không được lấp đầy bởi bản sao nông. & NBSP; Lưu ý: Trình biên dịch C ++ hoàn toàn tạo ra một hàm tạo sao chép và toán tử quá tải để thực hiện bản sao nông vào thời điểm biên dịch. & NBSP; Bản sao nông của đối tượng Nếu một số biến được xác định trong bộ nhớ heap, sau đó:of object if some variables are defined in heap memory, then: Dưới đây là việc thực hiện phương pháp trên: C++
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160____11 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 162 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160____11 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 165 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160____11 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 168 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 169 : Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160____22 #include 3Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 161 #include 5Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 161 #include 7
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 161 using 0Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 using 2
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 namespace 0Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 #include 2 namespace 3Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 using 2
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 namespace 0
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 161 class 4
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 class 7Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 class 9Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 box { 1Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 box { 3Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 box { 5Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 box { 7Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 box { 9Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 private 1 private 2
Output: Length = 14 Breadth = 12 Height = 16 Length = 14 Breadth = 12 Height = 16 Length = 14 Breadth = 12 Height = 16 Bản sao sâu:Trong bản sao sâu, một đối tượng được tạo bằng cách sao chép dữ liệu của tất cả các biến và nó cũng phân bổ tài nguyên bộ nhớ tương tự có cùng giá trị cho đối tượng. Để thực hiện bản sao sâu, chúng ta cần xác định rõ ràng hàm tạo sao chép và cũng gán bộ nhớ động, nếu được yêu cầu. Ngoài ra, nó cũng được yêu cầu phân bổ bộ nhớ một cách linh hoạt cho các biến trong các hàm tạo khác. Dưới đây là việc thực hiện phương pháp trên: C++
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160____11 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 162 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 161 : 7Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160____11 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 168 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 169 : Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1604 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 using 2Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160____22 #include 3Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 161 #include 5Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 161 #include 7Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 namespace 0
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 161 using 0Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 #include 2 namespace 3
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 using 2
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1627
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1629
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1631 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 namespace 0Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 #include 2 namespace 3Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 using 2
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 namespace 0Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1656 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 using 2
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1660 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160____22 #include 3Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 161 #include 5Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 161 #include 7
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1667
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1669 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 namespace 0Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1673 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 using 2
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 161 using 0Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 namespace 0
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 161 class 4
Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1686 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1688 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1690 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1692 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 1694 Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 160 private 1 private 2
Output: Length = 12 Breadth = 14 Height = 16 Length = 12 Breadth = 14 Height = 16 Bản sao sâu:
|