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

sil*_*cer 1 c++ auto-ptr

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

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

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

auto_ptr<tClass> * B = new tClass();
f(B);
B-> printSomething();
Run Code Online (Sandbox Code Playgroud)

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

Sin*_*ion 6

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

当你传递一个auto_ptr的功能,你是"给予"的功能指针,所以你不要它了.当你取消引用它时,你会得到一个空指针行为(当然是未定义的).

但是,为了让你的代码能够编译,你必须改变你的定义B,它应该是

auto_ptr<tClass> B = new tClass;
Run Code Online (Sandbox Code Playgroud)

因为auto_ptr的是不是一个类型(其类型模板),你不真的想要一个指针类型可言,因为类的重载这些行为.