autr_prt的一些用法

来源:百度知道 编辑:UC知道 时间:2024/06/17 00:39:59
下列auto_ptr 声明哪些是非法的或可能引起后续的程序出现错误 解释原因
int ix = 1024;
int *pi = & ix;
int *pi2 = new int( 2048 );

(a) auto_ptr<int> p0(ix);
(b) auto_ptr<int> p1(pi);
(c) auto_ptr<int> p2(pi2);
(d) auto_ptr<int> p3(&ix);
(e) auto_ptr<int> p4(new int(2048));
(f) auto_ptr<int> p5(p2.get());
(g) auto_ptr<int> p6(p2.release());
(h) auto_ptr<int> p7(p2);

1、a, b, d, 明显错误,auto_ptr 的指针必须是动态分配的(new)
2、c 可以。需要注意不要直接使用pi2指针,因为如果在p2超出其生存期也即删除pi2内存后,后续程序如果使用pi2指针,会错的!
3、e 是正确的
4、f,引起后续错误;同一个指针付给两个auto_ptr,则pi2将被删除两次
5、g 可以。p2.release()释放了对pi2的所有权,并没有释放内存。然后把pi2的所有权交给p6,这是正确的。这以后不要使用pi2。同时也注意2、中所说的问题。
6、h 和g是一样的。其实p7(p2)的内部就是p7(p2->release())这样调用的。