对auto_ptr的学习(3)
赋值操作符可以将一个auto_ptr对象拷贝到另一个中,如下所示:
p1 = p2;
在赋值之前,由p1指向的对象被删除.赋值之后,p1拥有int型对象的所有权,该对象值为2048,p2不再被用来指向该对象.
在auto_ptr定义的第三种形式中,我们创建一个auto_ptr对象,但是没有用指针将其初始化.例如:
auto_ptr
因为p_auto_int没有被初始化指向一个对象,所以它的内部指针值被设置为0,这意味着对它解引用会使程序出现未定义的行为,就好像我们直接解引用一个值为0的指针时所发生的一样.
对于普通指针,我们只需测试是否为0,例如:
if (pi != 0);
但是怎样测试一个auto_ptr对象是否指向一个底层对象呢?操作get()返回auto_ptr对象内部的底层指针,所以为了判断auto_ptr指针是否指向一个对象,可以如下编程:
int *pi = 0;
if (p_auto_int.get() != 0 && *p_auto_int != 1024)
*p_auto_int = 1024;
如果它没有指向一个对象,那么怎样使其指向一个呢?即怎样设置一个auto_ptr对象的底层指针?我们可以用reset()操作,例如:
p_auto_int.reset(new int(1024));
我们不能够在auto_ptr对象被定义之后,再用new表达式创建对象的地址来直接向其赋值,因此,我们不能这样写:
void example()
{
auto_ptr
{
pi = new int(4);
}
}
如果为了重置一个auto_ptr对象,我们必须使用reset()函数,我们可以向reset()传递一个指针,如果不希望设置该auto_ptr对象的话,可以传递一个0值.如果auto_ptr当前指向一个对象并且该auto_ptr对象拥有该对象的所有权,则该对象在底层指针被重置之前,首先被删除,例如:
- 上一篇:c++文件拷贝
- 下一篇:seq_file应用