首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针与智能指针的区别

指针与智能指针的区别
EN

Stack Overflow用户
提问于 2010-10-04 03:54:23
回答 2查看 1.3K关注 0票数 1

你能告诉我这段代码出了什么问题吗?我在一次面试中被问到这个问题,我不确定这是怎么回事

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

代码语言:javascript
复制
tClass * A = new tClass();
f(A);
A->printSomething();

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

或者这是什么刁钻的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-04 04:00:13

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

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

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

代码语言:javascript
复制
auto_ptr<tClass> B = new tClass;

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

票数 6
EN

Stack Overflow用户

发布于 2010-10-04 03:59:01

错误的地方:

永远不会删除

  • A。未声明
  • f。
  • B的类型可能应该是tClass*,而该类型不是分配给B的正确类型。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3851361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档