1.Complex c1(1,2);//這表示c1占用的空間來(lái)自stack眠蚂。這個(gè)stack是作用域內(nèi)的空間斗躏。例如函數(shù)調(diào)用時(shí)會(huì)創(chuàng)建一個(gè)stack,用來(lái)存放接收的參數(shù)和返回地址笛臣。調(diào)用結(jié)束自己釋放。
2.Complex* p=new Complex(3);//p指向的內(nèi)容存放在heap(或者稱(chēng)system
heap)里静陈,使用結(jié)束要手動(dòng)釋放鲸拥。否則會(huì)造成內(nèi)存泄漏(memory leak)僧免。因?yàn)橹羔榩會(huì)被清理,但它指向的內(nèi)容不會(huì)被清理撞叨。
3.1中的c1又稱(chēng)auto object浊洞,auto表示會(huì)被自動(dòng)清理
4.Static對(duì)象的生命在作用域(scope)之后仍然存在,直至整個(gè)程序結(jié)束沛申。
5.Cpp的new時(shí)先分配memory再調(diào)用構(gòu)造函數(shù)铁材。如:complex *pc = new complex(1,2);編譯器把new轉(zhuǎn)化為:void* mem = operator new(sizef(complex)); pc =
static_cast(mem);//轉(zhuǎn)型pc->complex::complex(1,2);new的內(nèi)部調(diào)用的是malloc(n)
6.delete編譯器化為先調(diào)析構(gòu)函數(shù),再釋放指針內(nèi)存
7.分配出的內(nèi)存狀態(tài):頭尾有cookies著觉,4個(gè)字節(jié)饼丘,中間有系統(tǒng)給的32+4個(gè)字節(jié)的空間,如果是數(shù)組肄鸽,還有4字節(jié)的空間儲(chǔ)存數(shù)組元素個(gè)數(shù)。
8.Array new要array delete蟀苛。即delete后加[]