ฉันค่อนข้างใหม่สำหรับ Qt และฉันสงสัยเกี่ยวกับสิ่งพื้นฐานบางอย่างเกี่ยวกับการจัดการหน่วยความจำและอายุการใช้งานของวัตถุ ฉันต้องลบและ / หรือทำลายวัตถุของฉันเมื่อใด สิ่งนี้ได้รับการจัดการโดยอัตโนมัติหรือไม่?
ในตัวอย่างด้านล่างฉันต้องลบวัตถุใดบ้างที่ฉันสร้าง จะเกิดอะไรขึ้นกับตัวแปรอินสแตนซ์myOtherClass
เมื่อmyClass
ถูกทำลาย จะเกิดอะไรขึ้นถ้าฉันไม่ลบ (หรือทำลาย) วัตถุของฉันเลย? จะเป็นปัญหาต่อหน่วยความจำหรือไม่?
MyClass.h
class MyClass
{
public:
MyClass();
~MyClass();
MyOtherClass *myOtherClass;
};
MyClass.cpp
MyClass::MyClass() {
myOtherClass = new MyOtherClass();
MyOtherClass myOtherClass2;
QString myString = "Hello";
}
อย่างที่คุณเห็นว่านี่เป็นสิ่งที่ค่อนข้างง่ายสำหรับมือใหม่ แต่ฉันจะเรียนรู้เกี่ยวกับเรื่องนี้ด้วยวิธีง่ายๆได้ที่ไหน
(It does this by issuing signals, so it is safe even when you delete child manually before the parent.)
-> นี่ไม่ใช่เหตุผลว่าทำไมจึงปลอดภัย ใน Qt 4.7.4 เด็ก QObject จะถูกลบโดยตรง (ผ่านdelete
ดู qobject.cpp บรรทัด 1955) เหตุผลที่ปลอดภัยในการลบออบเจ็กต์ลูกก่อนคือ QObject บอกให้พาเรนต์ลืมเมื่อมันถูกลบ