1、動態內存管理工具
一般咱們建立動態內存的時候,須要本身管理好內存,也就是說,new出來的對象必定要注意釋放掉。下面經過例子能夠看到這個問題所在:源碼分析
struct BBE{ int X; int Y; void show() { qDebug()<<X<<'\t'<<Y<<endl; } }; void test() { BBE *n = new BBE; n->X = 10; n->Y = 20; n->show(); } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); test(); return a.exec(); }
咱們經過Qt中的Clang Static Analyzer的源碼分析工具,能夠檢測到內存問題:spa
所以,對應的new 出來的動態內存要注意釋放掉,指針
void test() { BBE *n = new BBE; n->X = 10; n->Y = 20; n->show(); delete n; n = NULL; }
如上便可,釋放掉內存的指針習慣指向NULL,防止出現懸空指針。對象
2、野指針與懸空指針blog
A pointer in c which has not been initialized is known as wild pointer. ---- 野指針內存
If a pointer still references the original memory after it has been freed, it is called a dangling pointer. ---- 懸空指針源碼
3、智能指針it
本文以Qt中提供的智能指針爲例,首先,智能指針類將一個計數器與類指向的對象相關聯,引用計數跟蹤該類有多少個對象的指針指向同一對象。經過這一方法實現對內存的管理功能。內存管理
在上面的例子中,能夠改成代碼:
void test() { QSharedPointer<BBE> n(new BBE); n->X = 10; n->Y = 20; n->show(); }
能夠看到,使用智能指針的話,不須要手動delete內存了。