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

การเริ่มต้นการคัดลอกและการเริ่มต้นโดยตรงใน C ++ มีความแตกต่างหรือไม่?


การเริ่มต้นการคัดลอกสามารถทำได้โดยใช้แนวคิดของตัวสร้างการคัดลอก อย่างที่เราทราบดีว่าคอนสตรัคเตอร์ใช้ในการเริ่มต้นวัตถุ เราสามารถสร้างตัวสร้างการคัดลอกเพื่อทำสำเนาของวัตถุอื่น หรือกล่าวอีกนัยหนึ่ง เริ่มต้นวัตถุปัจจุบันด้วยค่าของวัตถุอื่น ในทางกลับกัน การเริ่มต้นโดยตรงสามารถทำได้โดยใช้การดำเนินการมอบหมาย

ความแตกต่างหลัก ระหว่างการเริ่มต้นสองประเภทนี้คือ การเริ่มต้นสำเนาสร้างบล็อกหน่วยความจำแยกต่างหากสำหรับวัตถุใหม่ แต่การเริ่มต้นโดยตรงไม่ได้สร้างพื้นที่หน่วยความจำใหม่ ใช้ตัวแปรอ้างอิงเพื่อชี้ไปที่บล็อกหน่วยความจำก่อนหน้า

คัดลอกตัวสร้างหรือคัดลอกการเริ่มต้น (ไวยากรณ์)

classname (const classname &obj) {
   // body of constructor
}

การเริ่มต้นโดยตรงหรือตัวดำเนินการมอบหมาย (ไวยากรณ์)

classname Ob1, Ob2;
Ob2 = Ob1;

ให้เราดูความแตกต่างโดยละเอียดระหว่างการเริ่มต้นการคัดลอกและการเริ่มต้นโดยตรง

คัดลอกการเริ่มต้น การเริ่มต้นโดยตรง
การเริ่มต้นการคัดลอกนั้นเป็นคอนสตรัคเตอร์ที่โอเวอร์โหลด การเริ่มต้นโดยตรงสามารถทำได้โดยใช้ตัวดำเนินการมอบหมาย
สิ่งนี้จะเริ่มต้นวัตถุใหม่ด้วยวัตถุที่มีอยู่แล้ว สิ่งนี้กำหนดค่าของวัตถุหนึ่งให้กับวัตถุอื่นซึ่งทั้งสองมีอยู่แล้ว
การคัดลอกเริ่มต้นใช้เมื่อมีการสร้างวัตถุใหม่ด้วยวัตถุที่มีอยู่ ใช้เมื่อเราต้องการกำหนดวัตถุที่มีอยู่ให้กับวัตถุใหม่
วัตถุทั้งสองใช้ตำแหน่งหน่วยความจำแยกกัน ใช้ตำแหน่งหน่วยความจำหนึ่งตำแหน่ง แต่ตัวแปรอ้างอิงต่างกันชี้ไปยังตำแหน่งเดียวกัน
หากไม่มีการกำหนดคอนสตรัคเตอร์การคัดลอกในคลาส คอมไพเลอร์จะจัดเตรียมให้ หากตัวดำเนินการมอบหมายไม่โอเวอร์โหลด ระบบจะทำการคัดลอกระดับบิต