随笔-34  评论-108  文章-0  trackbacks-0
     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 探丫头 阅读(1228) 评论(2)  编辑 收藏 引用 所属分类: 编程语言——C++

评论:
# re: auto_ptr复制 2007-04-03 15:10 | skipper
effective c++里已经有详细解释了  回复  更多评论
  
# re: auto_ptr复制 2007-04-03 17:14 | 平凡小草
哦,没看过那本书,呵呵,不管怎么着,这是我第一次接触,总允许我总结下自己的所学吧  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理