auto_ptr在退出作用域時(shí),它所指的對(duì)象將被自動(dòng)的隱式刪除。
auto_ptr具有與常規(guī)指針很不一樣的復(fù)制語(yǔ)義:在將一個(gè)auto_ptr復(fù)制給另一個(gè)之后,原來的那個(gè)auto_ptr將不再指向任何東西。因?yàn)閺?fù)制auto_ptr將導(dǎo)致它本身的修改,因此const auto_ptr不能被復(fù)制。
如果指針D*能被轉(zhuǎn)換到B*,模板構(gòu)造函數(shù)和模板賦值都能將auto_ptr<D>轉(zhuǎn)換到auto_ptr<B>。
針對(duì)此問題,舉例如下:
void g(Circle* pc)
{
auto_ptr<Circle> p2(pc); //現(xiàn)在p2負(fù)責(zé)刪除
auto_ptr<Circle> p3(p2); //現(xiàn)在p3負(fù)責(zé)刪除,且p2不再負(fù)責(zé)
Shape* ps = p3.Get(); //從auto_ptr抽取指針
auto_ptr<Shape> aps(p3); //轉(zhuǎn)移所有權(quán),并轉(zhuǎn)換類型,現(xiàn)在aps負(fù)責(zé)刪除,且p3不再負(fù)責(zé)
}
posted on 2007-04-02 17:20
探丫頭 閱讀(1311)
評(píng)論(2) 編輯 收藏 引用 所屬分類:
編程語(yǔ)言——C++