你能告诉我这段代码有什么问题吗?我在面试中被问到这个问题,我不确定它有什么问题
tClass 是一个测试类,其方法 printSomething 打印 tClass 的成员。
tClass * A = new tClass();
f(A);
A->printSomething();
auto_ptr<tClass> * B = new tClass();
f(B);
B-> printSomething();
或者这是一个技巧问题。
auto_ptr 是一种智能指针,它在只有一方拥有指针的前提下运行,如果该拥有方超出范围,则指针将被删除。
当您将 auto_ptr 传递给函数时,您就是在“给予”该函数指针,因此您不再拥有它。当你取消引用它时,你会得到一个空指针行为(当然,这是未定义的)。
但是,为了使您的代码能够编译,您必须稍微更改一下定义B
,它应该是
auto_ptr<tClass> B = new tClass;
因为 auto_ptr 不是类型(它是类型模板),并且您实际上根本不需要指向该类型的指针,因为该类重载了这些行为。
有问题的地方:
auto_ptr<tClass>
。new tClass()
属于tClass*
不适合分配给 B 的类型。