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

วัตถุจะถูกเก็บไว้ที่ไหนถ้ามันถูกสร้างขึ้นภายในบล็อกใน C ++?


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

  • กอง - สมาชิกทั้งหมดที่ถูกประกาศภายในบล็อกของหน่วยความจำ จะเก็บไว้ในส่วนสแต็ค ฟังก์ชันหลักยังเป็นฟังก์ชัน ดังนั้นองค์ประกอบภายในจะถูกจัดเก็บไว้ในสแต็ก

  • กอง − เมื่อบางอ็อบเจ็กต์ได้รับการจัดสรรแบบไดนามิก สิ่งนั้นจะถูกเก็บไว้ในส่วนฮีป

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

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

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include ใช้เนมสเปซ std;class Box { ความกว้าง int; ความยาว int;public:กล่อง (ความยาว int =0, ความกว้าง int =0) { this->length =ความยาว; this->width =width; } ~Box() { cout <<"กล่องกำลังทำลาย" <get_len() <get_width() <get_len() <get_width() < 

ผลลัพธ์

ขนาดกล่องคือ:Length :2Width :3Box กำลังทำลาย Exitting block, destructor เรียกวัตถุที่จัดเก็บไว้ใน stack โดยอัตโนมัติ---------------------- ---------------------------- ขนาดกล่อง 2 is:length :5width :6Box is destroyinglength of box2 :0width of box2 :0