ส่วนประกอบหลัก:
องค์ประกอบหลักสองประการของอ็อบเจ็กต์ unique_ptr มีให้ด้านล่าง:
A. ตัวชี้ที่เก็บไว้:
มันถูกใช้เพื่อจัดการวัตถุที่สร้างขึ้นโดยตัวชี้เฉพาะ สร้างขึ้นในขณะที่สร้างตัวชี้ และสามารถเปลี่ยนได้หลายวิธี
B. ตัวลบที่เก็บไว้:
ใช้อาร์กิวเมนต์ของชนิดตัวชี้ที่เก็บไว้ซึ่งใช้ในการลบวัตถุที่มีการจัดการ มันถูกสร้างขึ้นในช่วงเวลาของการสร้างตัวชี้ด้วย และสามารถเปลี่ยนแปลงได้ด้วยวิธีต่างๆ
ตัวอย่างที่ 1: สร้างวัตถุตัวชี้ของคลาสด้วยตัวสร้าง
วิธีการประกาศอ็อบเจ็กต์ตัวชี้เฉพาะของคลาสและการเข้าถึงเมธอดของคลาสคือการใช้อ็อบเจ็กต์ดังแสดงในตัวอย่างต่อไปนี้ มีการประกาศคลาสที่มีตัวสร้างและวิธีการสาธารณะในรหัส ตัวสร้างมีสามอาร์กิวเมนต์ ตัวชี้เฉพาะตัวแรกถูกสร้างขึ้นโดยการเรียกตัวสร้างด้วยค่าอาร์กิวเมนต์สามค่า NS ผลลัพธ์() เมธอดถูกเรียกโดยอ็อบเจกต์พอยน์เตอร์ที่คำนวณผลรวมของค่าอาร์กิวเมนต์สามค่าของคอนสตรัคเตอร์ ถัดไป วัตถุตัวชี้เฉพาะตัวที่สองจะถูกสร้างขึ้นโดยไม่ต้องเรียกตัวสร้าง และตัวชี้ตัวแรกจะถูกย้ายไปยังตัวชี้ตัวที่สอง NS ผลลัพธ์() วิธีการถูกเรียกโดยวัตถุตัวชี้ที่สอง
//รวมห้องสมุดที่จำเป็น#รวม
#รวม
ใช้เนมสเปซ std;
//กำหนดชั้นเรียน
การเพิ่มชั้นเรียน{
จำนวนเต็ม 1, หมายเลข 2, หมายเลข 3;
สาธารณะ:
//ประกาศตัวสร้าง
ส่วนที่เพิ่มเข้าไป(int a, int b, int c)
{
หมายเลข 1 = ก;
หมายเลข 2 = ข;
หมายเลข 3 = ค;
}
//ประกาศวิธีการคำนวณผลรวม
int ผลลัพธ์()
{
กลับหมายเลข 1 + หมายเลข 2 + หมายเลข 3;
}
};
int หลัก()
{
//ประกาศตัวชี้แรก
unique_ptr pointer1(การเพิ่มใหม่(สี่ห้า,55,30));
ค่าใช้จ่าย<<'ผลรวมโดยใช้ตัวชี้แรก :'<ผลลัพธ์() <<'NS';
//ประกาศตัวชี้ที่สอง
ตัวชี้ unique_ptr2;
//ย้ายตัวชี้ตัวแรกไปยังตัวชี้ตัวที่สอง
ตัวชี้ 2 = ย้าย(ตัวชี้1);
ค่าใช้จ่าย<<'ผลรวมโดยใช้ตัวชี้ที่สอง :'<ผลลัพธ์() <<'NS';
ผลตอบแทน0;
}
เอาท์พุท:
ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากรันโค้ดด้านบน ผลรวมของ 45, 55 และ 30 คือ 130 ที่พิมพ์สำหรับตัวชี้ทั้งสอง
ตัวอย่างที่ 2: สร้างวัตถุตัวชี้ของคลาสด้วยตัวสร้างและตัวทำลาย
วิธีการประกาศวัตถุตัวชี้เฉพาะของคลาสที่มีตัวสร้างและตัวทำลายล้างได้แสดงในตัวอย่างต่อไปนี้ คลาสประกอบด้วยคอนสตรัคเตอร์ที่มีอาร์กิวเมนต์เดียว เมธอดสาธารณะชื่อ Display() สำหรับค่าของตัวแปรคลาส และตัวทำลายล้างที่จะพิมพ์ข้อความทำลายก่อนทำลายอ็อบเจ็กต์ของคลาส วิธีการ Display() ถูกเรียกหลังจากสร้างวัตถุตัวชี้เฉพาะในโค้ด
//รวมห้องสมุดที่จำเป็น#รวม
#รวม
ใช้เนมสเปซ std;
//กำหนดชั้นเรียน
คลาสลูกค้า
{
ชื่อสตริง;
สาธารณะ:
//ประกาศตัวสร้าง
ลูกค้า(สตริง n)
{
ชื่อ = น;
ค่าใช้จ่าย<<'มีการจัดสรรทรัพยากรNS';
}
//ประกาศวิธีการพิมพ์ชื่อลูกค้า
โมฆะจอแสดงผล()
{
ค่าใช้จ่าย<<'ชื่อลูกค้าคือ:'<<ชื่อ<<'NS';
}
//ประกาศผู้ทำลาย
~ลูกค้า()
{
ค่าใช้จ่าย<<'ทรัพยากรถูกทำลายNS';
}
};
int หลัก()
{
//จัดสรรวัตถุทรัพยากรที่เป็นของ unique_ptr
unique_ptruPointer{ลูกค้าใหม่('มีร์ อับบาส') };
uPointer->แสดง();
ผลตอบแทน0;
}
เอาท์พุท:
ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากรันโค้ดด้านบน:
ตัวอย่างที่ 3: ตรวจสอบตัวชี้หลังจากโอนความเป็นเจ้าของ
วิธีตรวจสอบความเป็นเจ้าของตัวชี้เฉพาะได้แสดงในตัวอย่างต่อไปนี้ โดยการสร้างตัวชี้เฉพาะสองตัวของคลาส มีการประกาศคลาสที่มีตัวแปรสตริงสองตัวและเมธอดสาธารณะในโค้ด Book_details() วิธีการของคลาสถูกเรียกหลังจากสร้างวัตถุตัวชี้เฉพาะตัวแรกของคลาส ถัดไป มีการสร้างวัตถุตัวชี้เฉพาะตัวที่สอง และตัวชี้ตัวแรกถูกย้ายไปยังตัวชี้ตัวที่สองที่ทำลายตัวชี้ตัวแรก ควรตรวจสอบความเป็นเจ้าของของตัวชี้ทั้งสองในภายหลัง
//รวมห้องสมุดที่จำเป็น#รวม
#รวม
ใช้เนมสเปซ std;
//กำหนดชั้นเรียน
หนังสือเรียน{
ชื่อสตริง ='ภาษาการเขียนโปรแกรม C ++';
ผู้เขียนสตริง ='บียาร์น สตรูสทรัพ';
สาธารณะ:
//ประกาศวิธีการพิมพ์รายละเอียดหนังสือ
voidBook_details()
{
ค่าใช้จ่าย<<'ชื่อหนังสือ:'<<ชื่อ<<'NS';
ค่าใช้จ่าย<<'ชื่อผู้แต่ง:'<<ผู้เขียน<<'NS';
}
};
int หลัก()
{
//ประกาศตัวชี้แรก
unique_ptr pointer1(หนังสือเล่มใหม่());
ตัวชี้1->Book_details();
//ประกาศตัวชี้ที่สอง
ตัวชี้ unique_ptr2;
//ย้ายตัวชี้ตัวแรกไปยังตัวชี้ตัวที่สอง
ตัวชี้ 2 = ย้าย(ตัวชี้1);
//ตรวจสอบตัวชี้แรก
ถ้า (static_cast(ตัวชี้1))ค่าใช้จ่าย<<'ตัวชี้แรกไม่เป็นโมฆะNS';
อื่น<<'ตัวชี้แรกเป็นโมฆะNS';
//ตรวจสอบตัวชี้ที่สอง
ถ้า (static_cast(ตัวชี้2))ค่าใช้จ่าย<<'ตัวชี้ที่สองไม่เป็นโมฆะNS';
อื่น<<'ตัวชี้ที่สองเป็นโมฆะNS';
ผลตอบแทน0;
}
เอาท์พุท:
ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากรันโค้ดด้านบน ตามผลลัพธ์ ความเป็นเจ้าของของตัวชี้ตัวแรกถูกลบ และข้อความ ตัวชี้แรกเป็นโมฆะ ได้พิมพ์สำหรับตัวชี้แรก มีความเป็นเจ้าของตัวชี้ที่สองและข้อความ ตัวชี้แรกไม่เป็นโมฆะ ได้พิมพ์สำหรับตัวชี้ที่สอง:
บทสรุป:
วัตถุประสงค์ของการใช้ตัวชี้เฉพาะในการเขียนโปรแกรม C++ ได้อธิบายไว้ในบทช่วยสอนนี้โดยใช้ตัวอย่างหลายตัวอย่าง วิธีการสร้างตัวชี้เฉพาะ โอนความเป็นเจ้าของตัวชี้ และตรวจสอบความเป็นเจ้าของปัจจุบันของตัวชี้ได้รับการอธิบายไว้ที่นี่ เพื่อช่วยให้ผู้อ่านทราบการใช้ตัวชี้เฉพาะอย่างถูกต้อง