ฉันมีคลาสที่มีวิธีการกำหนดไว้ในไฟล์ example.cpp และคลาสที่กำหนดใน example.h มีตัวชี้ส่วนกลางแบบคงที่ที่กำหนดไว้ในไฟล์ example.cpp (ฉันต้องการตัวชี้นี้ที่กำหนดให้เป็นตัวชี้ส่วนกลางแบบคงที่ใน .cpp เนื่องจากถูกเรียกในรูทีนบริการขัดจังหวะแบบคงที่ที่ทำงานบนระบบ Bare-Metal) ฉันสงสัยว่า เมื่อใดที่อินสแตนซ์ของคลาสนี้ถูกลบ หน่วยความจำที่จัดสรรให้กับตัวชี้ส่วนกลางแบบคงที่นี้ ซึ่งกำหนดไว้ภายนอกคลาส (ภายในไฟล์ cpp เป็นตัวแปรส่วนกลางแบบคงที่) ทำให้ว่างขึ้นเช่นกัน? ฉันกังวลเกี่ยวกับปัญหาหน่วยความจำรั่ว (โปรดอย่าแนะนำอะไรด้วยตัวชี้อัจฉริยะ ขอบคุณ)
// example.cpp
#include <example.h>
static example* ptr;
example::example(){ prt = this; }
example::~example(){}
// example.h
class example
{
public:
example();
virtual ~example();
int a;
};
//main.c
void main(void)
{
while(1){
example eg1;
delete &eg1;
}
//Has all the memory allocated to eg1 been freed up including the global static variable(a pointer)?
}
ฉันเข้าใจว่า (int a) ภายในวัตถุนั้นจะถูกทำให้ว่างขึ้นอย่างแน่นอนเมื่อวัตถุถูกลบ แต่หน่วยความจำที่จัดสรรให้กับตัวชี้คงที่ส่วนกลางนั้นเอง (ตัวอย่างคงที่ * ptr) ก็จะถูกทำให้ว่างเช่นกันหรือไม่ (ฉันถือว่า) หากตัวแปรส่วนกลางแบบคงที่ไม่ได้รับการแชร์โดยอินสแตนซ์ทั้งหมดของคลาส จริง ๆ แล้วมันจะจัดสรรหน่วยความจำให้กับตัวแปรส่วนกลางแบบคงที่นี้ แต่ไม่ทำให้ว่างหลังจากอินสแตนซ์ถูกลบหรือไม่ มันจะทำให้หน่วยความจำรั่วหรือไม่
นี่เป็นครั้งแรกที่ฉันถามคำถามที่นี่ ขออภัยล่วงหน้าหากมีสิ่งใดไม่ชัดเจน
delete &eg1
ของคุณมีทั้งผิดอย่างร้ายแรงและไม่จำเป็นเลย... - person Lightness Races in Orbit   schedule 13.03.2015