Clone & Copy - คัดลอกค่า
Clone และ Copy คือ traits สำหรับคัดลอกค่า แต่ทำงานต่างกัน! เข้าใจสองตัวนี้สำคัญมากสำหรับ ownership system ของ Rust
Clone vs Copy
Section titled “Clone vs Copy”| Trait | วิธีคัดลอก | ต้องเรียก | ราคา |
|---|---|---|---|
Copy | คัดลอกอัตโนมัติ (bitwise) | ไม่ต้อง | ถูก |
Clone | คัดลอกแบบ explicit | ต้องเรียก .clone() | อาจแพง |
ทำไมต้องแยก?
Section titled “ทำไมต้องแยก?”fn main() { // ============================================ // Copy: ถูกมาก แค่ copy bits // ============================================
let a: i32 = 42; let b = a; // Copy! แค่ copy 4 bytes
println!("a: {}, b: {}", a, b); // ใช้ได้ทั้งคู่
// ============================================ // Clone: อาจแพง ต้อง allocate memory // ============================================
let s1 = String::from("hello"); let s2 = s1.clone(); // Clone! ต้อง allocate memory ใหม่บน heap
println!("s1: {}, s2: {}", s1, s2);
// ============================================ // ถ้า String เป็น Copy จะมีปัญหา: // ============================================
// let s3 = s1; // ถ้า auto-copy จะ allocate บ่อยเกินไป! // Rust เลือกให้ move แทน เพื่อให้ programmer ตัดสินใจ}เข้าสู่ระบบเพื่อดูเนื้อหาเต็ม
ยืนยันตัวตนด้วยบัญชี Google เพื่อปลดล็อกบทความทั้งหมด
Login with Google