对auto_ptr的学习(4)
auto_ptr
pstr_auto.reset(new string("YES")); //在重置之前删除对象Hello World
在这种情况下,用字符串操作assign()对原有的字符串对象重新赋值,比删除原有的字符串对象并重新分配第二个字符串对象更为有效:
//这种情况下,重置的更有效
pstr_auto->assign("YES");
程序设计的一个难事是:有时候仅仅得到正确的结果是不够的,有时候,我们不仅需要正确的结果,而且还需要一个可接受的性能,像调用assign()有效释放和重分配一个字符串这样的小细节就是一个很好的例子,它说明在某些情况下,这些小细节会积聚成可怕的性能瓶颈.
auto_ptr类模板为动态分配内存提供了大量的安全性和便利性,但是我们仍需小心,否则就会陷入麻烦.
1.我们必须小心,不能用一个指向"内存不是通过应用new表达式分配的"指针来初始化或赋值auto_ptr.如果这样做了,delete表达式会被应用在不是动态分配的指针上,这将导致未定义的程序行为.
2.我们必须小心,不能让两个auto_ptr对象拥有空间存储区内同一对象的所有权.一种很显然犯这种错误的方法是,用同一个指针初始化或赋值两个auto_ptr对象,另一个途径是通过get()操作,例如:
auto_ptr
auto_ptr
release()操作允许将一个auto_ptr对象的底层对象初始化或赋值给第二个对象,而不会使两个auto_ptr对象同时拥有同一个对象的所有权.release(0不权像get()一样返回底层对象的地址,而且还释放该对象的所有权,前面代码可被改写如下:
auto_ptr
此时两个对象仍然指向同一个对象,但是pstr_auto不再拥有拥有权.
- 上一篇:c++文件拷贝
- 下一篇:seq_file应用