你能告诉我这段代码有什么问题吗?我在接受采访时被问到了这一点,我不确定它有什么问题
tClass是一个带有printSomething方法的测试类,可以打印tClass的成员。
tClass * A = new tClass();
f(A);
A->printSomething();
auto_ptr<tClass> * B = new tClass();
f(B);
B-> printSomething();
或者这是一个棘手的问题。
答案 0 :(得分:6)
auto_ptr是一种智能指针,它在一方确实拥有指针的前提下运行,如果该拥有方超出范围,则指针被删除。
当你将auto_ptr传递给一个函数时,你正在“给”指针的函数,所以你不再拥有它了。当你取消引用它时,你会得到一个空指针行为(当然是未定义的)。
为了让您的代码能够编译,您必须稍微更改B
的定义,它应该是
auto_ptr<tClass> B = new tClass;
因为auto_ptr不是一个类型(它是一个类型模板),并且你根本不想要一个指向该类型的指针,因为该类会重载这些行为。
答案 1 :(得分:3)
事情有问题:
auto_ptr<tClass>
类型。new tClass()
属于tClass*
类型,不适合分配给B。