有效运用auto_ptr

 

有效运用auto_ptr

auto_ptr是一个类模板,用于生成具体的智能指针,它们知道在用完以后如何清理资源。如:

using std::auto_ptr;

auto_ptr<Shape> aShape(new Circle);

aShape->draw(); //画一个circle

(*aShape).draw(); //再画一个circle

如同所有设计良好的智能指针一样,auto_ptr重载了operator->和operator *,因此通常可以假装自己在处理一个内建的指针。

auto_ptr有很多好处,首先非常高效。其次,当auto_ptr离开作用域时,其析构函数将会释放它所指向的任何东西。在上面的代码片段中,aShape所指向的Circle对象们将会有效地被垃圾收集。再次,在类型转换方面,其行为酷似内建指针。如

auto_ptr<Circle> aCircle(new Circle);

aShape = aCircle;

通过灵活使用模板成员参数,一个auto_ptr可以赋值给另一个,只要相应的内建指针支持这种操作就可。在上面的代码中,一个auto_ptr<Circle>可以赋值给 auto_ptr<Shape>,因为一个Circle*可以赋值给一个Shape*(假定Shape是Circle的一个公有基类)。

auto_ptr不同于普通的智能指针的地方在于其赋值操作。当auto_ptr执行赋值操作时,参与赋值的源值和目标值都受到了影响。

auto_ptr在两个场合应该避免使用。首先,他们永远都不应该被用做容器元素。其次,一个auto_ptr应该指向单个元素,而不该指向一个数组。

Advertisements
有效运用auto_ptr

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s