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
探丫头 阅读(1279)
评论(2) 编辑 收藏 引用 所属分类:
编程语言——C++