指针和智能指针之间的区别

时间:2010-10-03 19:54:23

标签: c++ auto-ptr

你能告诉我这段代码有什么问题吗?我在接受采访时被问到了这一点,我不确定它有什么问题

tClass是一个带有printSomething方法的测试类,可以打印tClass的成员。

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

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

或者这是一个棘手的问题。

2 个答案:

答案 0 :(得分:6)

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

当你将auto_ptr传递给一个函数时,你正在“给”指针的函数,所以你不再拥有它了。当你取消引用它时,你会得到一个空指针行为(当然是未定义的)。

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

auto_ptr<tClass> B = new tClass;

因为auto_ptr不是一个类型(它是一个类型模板),并且你根本不想要一个指向该类型的指针,因为该类会重载这些行为。

答案 1 :(得分:3)

事情有问题:

  • 永远不会删除。
  • f未声明。
  • B应该是auto_ptr<tClass>类型。
  • new tClass()属于tClass*类型,不适合分配给B。