บทช่วยสอน หน่วยความจำแบบไดนามิก c ++ ที่ดีที่สุดในปี 2024 ในบทช่วยสอนนี้ คุณสามารถเรียนรู้ ผู้ประกอบการใหม่และลบ,อาร์เรย์ของหน่วยความจำแบบไดนามิกการจัดสรร,วัตถุจัดสรรหน่วยความจำแบบไดนามิก,
ทำความเข้าใจเกี่ยวกับหน่วยความจำแบบไดนามิกใน C ++ มันเป็นวิธีการทำงานคือการเป็นผู้ที่มีคุณสมบัติเหมาะสม C ++ เขียนโปรแกรมที่จำเป็น C ++ หน่วยความจำโปรแกรมจะแบ่งออกเป็นสองส่วน
หลายครั้งคุณไม่สามารถคาดการณ์ล่วงหน้าว่าหน่วยความจำมากจำเป็นต้องมีการจัดเก็บตัวแปรที่กำหนดไว้ในข้อมูลเฉพาะที่จำเป็นในการกำหนดขนาดของหน่วยความจำที่จำเป็นที่รันไทม์
ใน C ++, คุณสามารถใช้ประกอบการพิเศษจะกำหนดให้กับตัวแปรประเภทที่กำหนดของหน่วยความจำภายในกองในเวลาทำงานก็จะส่งกลับพื้นที่ที่อยู่ที่จัดสรรผู้ประกอบการนี้จะถูกประกอบการใหม่
หากคุณไม่จำเป็นต้องจัดสรรหน่วยความจำแบบไดนามิกคุณสามารถใช้ตัวดำเนินการลบลบโดยผู้ประกอบการใหม่ก่อนที่จะจัดสรรหน่วยความจำ
นี่คือผู้ประกอบการใหม่ที่จะใด ๆ ไวยากรณ์ทั่วไปของชนิดข้อมูลการจัดสรรแบบไดนามิกของหน่วยความจำ:
new data-type;
นี่คือข้อมูลประเภทสามารถในตัวชนิดข้อมูลใด ๆ รวมทั้งอาร์เรย์สามารถเป็นชนิดใด ๆ ของข้อมูลรวมทั้งชั้นเรียนหรือโครงสร้างรวมทั้งการที่ผู้ใช้กำหนดแรกให้เราดูในตัวชนิดข้อมูล ตัวอย่างเช่นเราสามารถกำหนดตัวชี้ไปยังตัวชี้ประเภทคู่แล้วขอให้หน่วยความจำหน่วยความจำจะถูกจัดสรรในเวลาทำงานเราสามารถใช้ประกอบการใหม่ให้สอดคล้องกับคำสั่งต่อไปเพื่อบรรลุนี้:
double* pvalue = NULL; // 初始化为 null 的指针 pvalue = new double; // 为变量请求内存
หากพื้นที่เก็บข้อมูลฟรีได้หมดก็อาจจะไม่ประสบความสำเร็จจัดสรรหน่วยความจำ ก็จะแนะนำให้ตรวจสอบว่าผู้ประกอบการใหม่กลับชี้โมฆะและดำเนินการที่เหมาะสมต่อไปนี้:
double* pvalue = NULL; if( !(pvalue = new double )) { cout << "Error: out of memory." <<endl; exit(1); }
malloc () ฟังก์ชันในภาษา C ที่ปรากฏใน C ++ ยังคงมีอยู่ แต่ก็ไม่แนะนำให้ใช้ malloc () ฟังก์ชัน() ฟังก์ชั่นใหม่และ malloc เมื่อเทียบกับประโยชน์หลักของมันคือการที่ไม่เพียง แต่จัดสรรหน่วยความจำใหม่ก็ยังสร้างวัตถุ
ณ เวลาใด ๆ เมื่อคุณรู้สึกว่าตัวแปรแบบไดนามิกจัดสรรหน่วยความจำแล้วไม่จำเป็นคุณสามารถใช้ตัวดำเนินการลบเพื่อปล่อยหน่วยความจำที่เคยดังต่อไปนี้:
delete pvalue; // 释放 pvalue 所指向的内存
ใช้ในแนวคิดดังกล่าวข้างต้นตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการใช้ใหม่และลบผู้ประกอบการ:
#include <iostream> using namespace std; int main () { double* pvalue = NULL; // 初始化为 null 的指针 pvalue = new double; // 为变量请求内存 *pvalue = 29494.99; // 在分配的地址存储值 cout << "Value of pvalue : " << *pvalue << endl; delete pvalue; // 释放内存 return 0; }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
Value of pvalue : 29495
สมมติว่าเราต้องการอาร์เรย์ตัวอักษร (สตริง 20 ตัวอักษร) จัดสรรหน่วยความจำที่เราสามารถใช้ตัวอย่างข้างต้นของไวยากรณ์อาร์เรย์แบบไดนามิกจัดสรรหน่วยความจำดังต่อไปนี้:
char* pvalue = NULL; // 初始化为 null 的指针 pvalue = new char[20]; // 为变量请求内存
ในการลบอาร์เรย์เราเพียงแค่สร้างคำสั่งดังต่อไปนี้:
delete [] pvalue; // 删除 pvalue 所指向的数组
นี่คือไวยากรณ์ทั่วไปประกอบการใหม่สามารถจัดสรรหน่วยความจำสำหรับอาร์เรย์หลายมิติดังนี้
int ROW = 2; int COL = 3; double **pvalue = new double* [ROW]; // 为行分配内存 // 为列分配内存 for(int i = 0; i < COL; i++) { pvalue[i] = new double[COL]; }
ปล่อยหน่วยความจำอาร์เรย์หลายมิติ:
for(int i = 0; i < COL; i++) { delete[] pvalue[i]; } delete [] pvalue;
วัตถุที่ไม่แตกต่างจากชนิดข้อมูลที่เรียบง่าย ยกตัวอย่างเช่นพิจารณารหัสต่อไปนี้เราจะใช้อาร์เรย์ของวัตถุที่จะชี้แจงแนวคิดนี้:
#include <iostream> using namespace std; class Box { public: Box() { cout << "调用构造函数!" <<endl; } ~Box() { cout << "调用析构函数!" <<endl; } }; int main( ) { Box* myBoxArray = new Box[4]; delete [] myBoxArray; // Delete array return 0; }
หากคุณต้องการกล่องมีสี่วัตถุจัดสรรอาร์เรย์หน่วยความจำสร้างจะถูกเรียกว่าสี่ครั้งในลักษณะเดียวกันเมื่อคุณลบวัตถุเหล่านี้ destructor จะถูกเรียกว่าจำนวนครั้ง (ครั้งที่สี่)
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
调用构造函数! 调用构造函数! 调用构造函数! 调用构造函数! 调用析构函数! 调用析构函数! 调用析构函数! 调用析构函数!