你能告诉我这段代码出了什么问题吗?我在一次面试中被问到这个问题,我不确定这是怎么回事
tClass是一个带有printSomething方法的测试类,用于打印tClass的成员。
tClass * A = new tClass();
f(A);
A->printSomething();
auto_ptr<tClass> * B = new tClass();
f(B);
B-> printSomething();或者这是什么刁钻的问题。
发布于 2010-10-04 04:00:13
auto_ptr是一种智能指针,它的操作前提是只有一方拥有该指针,如果拥有该指针的一方超出了范围,则该指针将被删除。
当你将一个auto_ptr传递给一个函数时,你给了函数那个指针,所以你不再拥有它了。当你取消引用它时,你会得到一个空指针行为(当然,这是未定义的)。
但是,为了让您的代码能够编译,您必须稍微更改一下B的定义,应该是
auto_ptr<tClass> B = new tClass;因为auto_ptr不是一个类型(它是一个类型模板),而且您实际上根本不需要指向该类型的指针,因为该类重载了这些行为。
发布于 2010-10-04 03:59:01
错误的地方:
永远不会删除
tClass*,而该类型不是分配给B的正确类型。https://stackoverflow.com/questions/3851361
复制相似问题