ประโยชน์ที่ใหญ่ที่สุดอย่างหนึ่งของการอ้างอิงมากกว่าตัวชี้คือความเรียบง่ายและอ่านง่ายมากขึ้น เช่นเคยเมื่อคุณลดความซับซ้อนของบางสิ่งคุณทำให้ใช้งานได้ง่ายขึ้น แต่ด้วยต้นทุนของความยืดหยุ่นและการควบคุมที่คุณจะได้รับจากสิ่งที่มีระดับต่ำ (ตามที่คนอื่น ๆ กล่าวถึง)
พอยน์เตอร์มักถูกวิพากษ์วิจารณ์ว่า 'น่าเกลียด'
class* myClass = new class();
ตอนนี้ทุกครั้งที่คุณใช้คุณจะต้องยกเลิกการอ้างอิงก่อนโดย
myClass->Method() or (*myClass).Method()
แม้จะสูญเสียความสามารถในการอ่านและเพิ่มความซับซ้อน แต่ผู้คนก็ยังคงต้องใช้ตัวชี้เป็นพารามิเตอร์เพื่อให้คุณสามารถปรับเปลี่ยนวัตถุจริง (แทนที่จะส่งผ่านค่า) และเพื่อให้ได้ประสิทธิภาพที่เพิ่มขึ้นโดยไม่ต้องคัดลอกวัตถุขนาดใหญ่
สำหรับฉันแล้วนี่คือสาเหตุที่การอ้างอิงเกิดขึ้นตั้งแต่แรกเพื่อให้ประโยชน์เช่นเดียวกับพอยน์เตอร์ แต่ไม่มีไวยากรณ์ตัวชี้ทั้งหมด ตอนนี้คุณสามารถส่งผ่านวัตถุจริง (ไม่ใช่แค่ค่าของมัน) และคุณมีวิธีโต้ตอบกับวัตถุตามปกติที่อ่านได้ง่ายขึ้น
MyMethod(&type parameter)
{
parameter.DoThis()
parameter.DoThat()
}
การอ้างอิง C ++ แตกต่างจากการอ้างอิง C # / Java ตรงที่เมื่อคุณกำหนดค่าให้กับค่านั้นแล้วคุณจะไม่สามารถกำหนดใหม่ได้ (และจะต้องกำหนดเมื่อมีการประกาศ) สิ่งนี้เหมือนกับการใช้ตัวชี้ const (ตัวชี้ที่ไม่สามารถชี้ไปที่วัตถุอื่นอีกครั้งได้)
Java และ C # เป็นภาษาสมัยใหม่ระดับสูงมากซึ่งทำความสะอาดความยุ่งเหยิงจำนวนมากที่สะสมใน C / C ++ ในช่วงหลายปีที่ผ่านมาและคำแนะนำก็เป็นหนึ่งในสิ่งเหล่านั้นที่จำเป็นต้อง 'ทำความสะอาด'
เท่าที่ความคิดเห็นของคุณเกี่ยวกับการรู้พอยน์เตอร์ทำให้คุณเป็นโปรแกรมเมอร์ที่แข็งแกร่งขึ้นนี่เป็นเรื่องจริงในกรณีส่วนใหญ่ หากคุณรู้ว่า 'วิธีการ' บางอย่างทำงานตรงข้ามกับเพียงแค่ใช้โดยไม่รู้ฉันจะบอกว่าสิ่งนี้มักจะทำให้คุณได้เปรียบ ขอบมากน้อยเพียงใดมักจะแตกต่างกันไป ท้ายที่สุดแล้วการใช้บางสิ่งโดยไม่รู้ว่ามันถูกนำไปใช้อย่างไรเป็นหนึ่งในความสวยงามของ OOP และอินเทอร์เฟซ
ในตัวอย่างเฉพาะนี้การรู้อะไรเกี่ยวกับพอยน์เตอร์จะช่วยคุณในการอ้างอิง การทำความเข้าใจว่าการอ้างอิง C # ไม่ใช่วัตถุ แต่ชี้ไปที่วัตถุเป็นแนวคิดที่สำคัญมาก
# 1: คุณไม่ผ่านค่า
ดีสำหรับผู้เริ่มต้นเมื่อคุณใช้ตัวชี้ที่คุณรู้ว่าตัวชี้มีที่อยู่เพียงแค่นั้น ตัวแปรนั้นแทบจะว่างเปล่าและนั่นเป็นเหตุผลที่ดีมากที่จะส่งผ่านเป็นอาร์กิวเมนต์ นอกเหนือจากการเพิ่มประสิทธิภาพแล้วคุณกำลังทำงานกับออบเจ็กต์จริงดังนั้นการเปลี่ยนแปลงใด ๆ ที่คุณทำจะไม่เกิดขึ้นชั่วคราว
# 2: ความหลากหลาย / อินเทอร์เฟซ
เมื่อคุณมีการอ้างอิงที่เป็นประเภทอินเทอร์เฟซและชี้ไปที่วัตถุคุณสามารถเรียกใช้เมธอดของอินเทอร์เฟซนั้นได้เท่านั้นแม้ว่าออบเจ็กต์อาจมีความสามารถอื่น ๆ อีกมากมาย วัตถุอาจใช้วิธีการเดียวกันแตกต่างกัน
หากคุณเข้าใจแนวคิดเหล่านี้ดีแล้วฉันไม่คิดว่าคุณจะพลาดมากเกินไปจากการไม่ได้ใช้พอยน์เตอร์ C ++ มักใช้เป็นภาษาในการเรียนรู้การเขียนโปรแกรมเพราะบางครั้งอาจทำให้มือของคุณสกปรกได้ นอกจากนี้การทำงานกับแง่มุมระดับล่างทำให้คุณรู้สึกซาบซึ้งกับความสะดวกสบายของภาษาสมัยใหม่ ฉันเริ่มต้นด้วย C ++ และตอนนี้เป็นโปรแกรมเมอร์ C # และฉันรู้สึกว่าการทำงานกับตัวชี้ดิบช่วยให้ฉันมีความเข้าใจที่ดีขึ้นเกี่ยวกับสิ่งที่เกิดขึ้นภายใต้ประทุน
ฉันไม่คิดว่าทุกคนจำเป็นต้องเริ่มต้นด้วยตัวชี้ แต่สิ่งที่สำคัญคือพวกเขาเข้าใจว่าเหตุใดการอ้างอิงจึงถูกใช้แทนประเภทคุณค่าและวิธีที่ดีที่สุดในการทำความเข้าใจก็คือการดูบรรพบุรุษของมันตัวชี้