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