1

你能告诉我这段代码有什么问题吗?我在面试中被问到这个问题,我不确定它有什么问题

tClass 是一个测试类,其方法 printSomething 打印 tClass 的成员。

tClass * A = new tClass();
f(A);
A->printSomething();

auto_ptr<tClass> * B = new tClass();
f(B);
B-> printSomething();

或者这是一个技巧问题。

4

2 回答 2

6

auto_ptr 是一种智能指针,它在只有一方拥有指针的前提下运行,如果该拥有方超出范围,则指针将被删除。

当您将 auto_ptr 传递给函数时,您就是在“给予”该函数指针,因此您不再拥有它。当你取消引用它时,你会得到一个空指针行为(当然,这是未定义的)。

但是,为了使您的代码能够编译,您必须稍微更改一下定义B,它应该是

auto_ptr<tClass> B = new tClass;

因为 auto_ptr 不是类型(它是类型模板),并且您实际上根本不需要指向该类型的指针,因为该类重载了这些行为。

于 2010-10-03T20:00:12.773 回答
3

有问题的地方:

  • A 永远不会被删除。
  • f 未声明。
  • B 应该是 type auto_ptr<tClass>
  • new tClass()属于tClass*不适合分配给 B 的类型。
于 2010-10-03T19:59:00.553 回答