Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

สมาชิกอาร์เรย์ถูกคัดลอกอย่างลึกซึ้งใน C ++ หรือไม่


ในกรณีของ C/C++ เราสามารถกำหนดตัวแปร struct (หรือคลาสใน C++ เท่านั้น) ให้กับตัวแปรประเภทเดียวกันอื่นได้ ในขณะที่เรากำหนดตัวแปร struct ให้กับอีกตัวหนึ่ง สมาชิกทั้งหมดของตัวแปรนั้นจะถูกคัดลอกไปยังตัวแปร struct อื่น ในกรณีนี้ จะเกิดคำถามว่า โครงสร้างประกอบด้วยอาร์เรย์อย่างไร

ตอนนี้ เราต้องหารือเกี่ยวกับอาร์เรย์ ประเด็นหลักที่ควรทราบคือสมาชิกอาร์เรย์จะไม่ถูกคัดลอกเป็นสำเนาแบบตื้น คอมไพเลอร์จะทำ Deep Copy ให้สำเร็จโดยอัตโนมัติในกรณีของสมาชิกอาร์เรย์ ในโปรแกรมด้านล่าง การทดสอบโครงสร้างประกอบด้วยสมาชิกอาร์เรย์ str1[] เมื่อเราสามารถกำหนด st1 ให้กับ st2 ได้ st2 ก็มีสำเนาใหม่ของอาร์เรย์ ดังนั้น st2 จะไม่ถูกแก้ไขหรือเปลี่ยนแปลงเมื่อเราแก้ไขหรือเปลี่ยน str[] ของ st1

ตัวอย่าง

# include <iostream>
# include <string.h>
using namespace std;
struct test{
   char str1[20];
};
int main(){
   struct test st1, st2;
   strcpy(st1.str1, "Tutorial Point");
   st2 = st1;
   st1.str1[0] = 'X';
   st1.str1[1] = 'Y';
   /* Because copy was Deep, both arrays are different */
   cout<< "st1's str = " << st1.str1 << endl;
   cout<< "st2's str = " << st2.str1 << endl;
   return 0;
}

ผลลัพธ์

st1's str = XYtorial Point
st2's str = Tutorial Point

ดังนั้น ในกรณีของคลาส C++ เราไม่จำเป็นต้องเขียนตัวสร้างการคัดลอกและตัวดำเนินการมอบหมายสำหรับสมาชิกอาร์เรย์ เนื่องจากพฤติกรรมเริ่มต้นคือ Deep Copy สำหรับอาร์เรย์