首页
学习
活动
专区
工具
TVP
发布

我应该明确归零auto_ptr吗?

首先,我们需要了解auto_ptr是C++中的一种智能指针,它可以自动管理对象的生命周期,避免内存泄漏。当auto_ptr对象超出作用域时,它会自动释放所管理的对象。

在C++11之前,auto_ptr是一种常用的智能指针,但在C++11及以后的版本中,由于unique_ptr的出现,auto_ptr已经被认为是不推荐使用的。unique_ptr相比于auto_ptr更加安全,它不支持拷贝,只支持移动,这样可以避免多个智能指针同时管理同一个对象,从而避免内存泄漏。

因此,如果你正在使用C++11或更高版本,建议使用unique_ptr代替auto_ptr。如果你必须使用auto_ptr,那么在某些情况下,你可能需要明确地将auto_ptr归零,以避免悬空指针。但是,更安全的做法是使用unique_ptr,因为它不需要归零。

总之,如果你正在使用C++11或更高版本,建议使用unique_ptr代替auto_ptr,以避免内存泄漏和悬空指针的问题。如果你必须使用auto_ptr,那么在某些情况下,你可能需要明确地将auto_ptr归零,但更安全的做法是使用unique_ptr

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

2018年应该学习Java

应该学习Java?这是一个不断出现的问题。如果你刚开始是一个开发人员,如果你已经是一个前端开发人员,或者即使你是一个。net背景的人,很多人都想知道学习Java是否是一个正确的职业/个人开发步骤。...为什么应该学Java而不是X、 Y、 Z等其它语言 ? 确信可能会有更多的问题和担忧,所以请在评论中告诉可以编辑文章或直接回答你。 让我们一起来看看这些问题吧!...如果您是JVM新手,您是否应该使用Java,或者应该直接使用(比方说)Kotlin? 认为,如果您想成为JVM上的职业开发人员,了解Java是必不可少的。...认为实际上这更多的是与JVM可用性有关,而不是人们对“性能”的担忧。 为什么应该学Java而不是X 、Y、 Z等其它语言 ? Java是一门神奇的语言。...应该学习Java? 是的,你应该学习Java。这是当今世界上最流行的语言。它相当简单、现代、快速,而且正在进化。有大量的图书馆可以帮助您编写令人惊叹的代码,并且可以方便地在线获取帮助和资料。

1K30

的职业是前端工程师二:入门不是应该很简单

入门前端,是一件很难的事?在今天,也没有想好一个答案,也不知道怎样给出一个答案。这个问题并不取决于前端,而是取决于不同人的需求。...的前端入门 在刚学前端工程师的时候,由于只需要编写 CSS、JavaScript 和 HTML,因此要做前端的活相当的简单。有时,甚至会觉得有些乏味。...下图就是的第一个网站: ? 当时,写给客户的代码大多乏味,没有挑战性。为了尝试各种新特性,就将各种奇怪的 CSS3 加到其中。 这一点在今天的日常工作里,也没有太多的变化。...曾经有一段时间里,使用 Aptana——它可以将 minify 后的代码格式化。 现在,使用 Intellij IDEA 和 WebStorm作为主要开发工具,它们的重构功能让难以自拔。...今天,也仍然在使用 Chrome 作为的日常和开发用浏览器。

86260

C++ 智能指针详解

所以,使用 std::auto_ptr 时,绝对不能使用“operator=”操作符。作为一个库,不允许用户使用,确没有明确拒绝[1],多少会觉得有点出乎预料。...正确的代码应该为: void TestAutoPtr3() {   std::auto_ptr my_memory(new Simple(1));   if (my_memory.get...(5)    …… 使用一个 std::auto_ptr 的限制还真多,还不能用来管理堆内存数组,这应该是你目前在想的事情吧,也觉得限制挺多的,哪天一个不小心,就导致问题了。...其次,由于 boost::scoped_ptr 是独享所有权的,所以明确拒绝用户写“my_memory2 = my_memory”之类的语句,可以缓解 std::auto_ptr 几个恼人的问题。     ...[3]读者应该看到了,在所有的名字前,都加了命名空间标识符std::(或boost::),这不是不想写 using namespace XXX 之类的语句,在大型项目中,有可能会用到 N 个第三方库

1.9K10

30岁了,传说中程序员最应该迷茫年龄,迷茫

今年三十了,到了传说中程序员最应该迷茫的年龄了,那么迷茫,没的说,按照华为34岁就要劝退的要求,还有4年的程序生涯。 为什么30岁的程序员就应该迷茫呢?...于是在公司了两三年后,换工作的时候目标就稍微明确了一些,做自己产品的公司,并且未来这些产品可以服务于大量的用户,这种类型的公司基本就都是互联网公司了,当时放眼西安几乎没有什么像样的互联网公司,大家都知道北京是互联网公司最多的地方...两三年之后应该是程序员最黄金的年龄,在这个阶段积累技术应该是最快的,如果你在自己的岗位中呆了一年多了,感觉还是没有学到什么东西,建议跳槽,有时候如果你自己没有能力去驱动自己去改变的时候,那就靠外部环境来驱动你...这就是30岁的迷茫,要不要重新选择拼搏一把,要不要离开这个热爱又无奈的城市。你呢? 最后 那么迷茫就不对?...所以呢,迷茫是一件好事?从某种角度来讲,认为是的。 那么作为程序员的你,还在迷茫

80630

C++|智能指针模板类

其中,auto_ptr是C++98中提供的,在新版的C++11中已经被摒弃,但为了对比理解,这里还会提到auto_ptr指针。...为了避免悬挂指针的出现,程序员应该注意内存的分配和释放,确保指针指向的内存空间是有效的。 相比于auto_ptr,unique_ptr还有一个优点。...使用new[]分配内存时,不能使用auto_ptr和shared_ptr。同上理,反之亦然。 ---- 如何选择智能指针? 如果程序要使用多个指针指向同一个对象,应该选择shared_ptr指针。...番外:将一个智能指针赋给另外一个一定会引起错误? 批话少说,代码掏出来看看!...它不也进行了赋值操作? 因为它调用unique_ptr的构造函数,该函数创建的临时对象在其所有权转让给pu3后就被立即销毁了,并不会长时间停留,也就是不会挂在哪儿。

54310

C++学习笔记-迭代器(iterator)与萃取机(traits)

的程序,可以更好的理解智能指针: template class auto_ptr{ public: explicit auto_ptr(T *p = 0) : pointee...(p){} //普通构造函数 template auto_ptr(auto_ptr& rhs) : pointee(rhs){} //拷贝构造 template...在编译器具现之前,编译器对I一无所知,使用typename可以告诉编译器这是一个类型 func(I ite){ return *ite; } 但是指针不能内嵌类型,如果迭代器是一个原生指针不就无法内嵌?...class Demo {}//这就是类型上的特化,只接受原生指针; 回到之前的问题;算法和容器两个独立的部件靠迭代器撮合一起的,那必须对应的类型要一样,就好比是这样一个场景:算法问迭代器,你作为算法的参数...你知道? 迭代器如果说不知道,,那就类型不对就无法进行下去了,如果说知道,那算法就直接说,那好,要对你指向的容器进行操作了,这样操作自然而然的就通顺了,,那迭代器是怎么回答算法这个问题的呢?

1.6K20

C++内存管理(建议收藏)

我们需要为每个对象分别定义一个封装类?(事实上,C++标准模板库已经有了一个模板类,叫做auto_ptr,其作用就是提供这种封装。我们一会儿在回到auto_ptr。)...std::auto_ptr 后来意识到在STL中的auto_ptr模板,就是的Strong Pointer。...的观点是,资源管理不应该被忽视,同时,也不应该在所有的地方滥用。在的经验里,一个strong vector经常被许多push_back方法充斥着。...使用资源句柄,这里用了标准库中的auto_ptr,使需要为之负责的地方变得明确了。...答案是肯定的,它们的确是指向同一个对象,这听起来不像是真的,是?但这是事实,你可以自己写段简单的代码验证一下。要做的是来解释为什么会这样?

2.5K40

C++ 为什么不加入垃圾回收机制

Java类似的垃圾回收(Gabage Collector)机制(这很正常,正如C++的爱好者有时也攻击Java没有这个没有那个,或者这个不行那个不够好),导致C++中对动态存储的官吏称为程序员的噩梦,不是?...在本文中,并不想揭露Java提供的垃圾回收机制的天生缺陷,而是指出了C++中引入垃圾回收的可行性。...简而言之,Bjarne本人认为, “有意这样设计C++,使它不依赖于自动垃圾回收(通常就直接说垃圾回收)。...auto_ptr只是智能指针的一种,它的复制行为提供了所有权转移的语义,即智能指针在复制时将对内部维护的实际指针的所有权进行了转移,例如 auto_ptr str1( new string...拥有了auto_ptr和shared_ptr两大利器以后,应该足以应付大多数情况下的垃圾回收了,如果你需要更复杂语义(主要是指复制时的语义)的智能指针,可以参考boost的源代码,其中设计了多种类型的智能指针

70930

详解 C++ 11 中的智能指针

然而,之所以还向你介绍一下 std::auto_ptr 的用法以及它的设计不足之处是想让你了解 C++ 语言中智能指针的发展过程,一项技术如果我们了解它过去的样子和发展的轨迹,我们就能更好地掌握它,不是...由于 std::auto_ptr 这种不常用的复制语义,我们应该避免在 stl 容器中使用 std::auto_ptr,例如我们绝不应该写出如下代码: std::vector<std::auto_ptr...正因为存在上述设计上的缺陷,在 C++11及后续语言规范中 std::auto_ptr 已经被废弃,你的代码不应该再使用它。...智能指针使用注意事项 C++ 新标准提倡的理念之一是不应该再手动调用 delete 或者 free 函数去释放内存了,而应该把它们交给新标准提供的各种智能指针对象。...注意代码中提醒注意的地方,该段程序会在代码 12 行处崩溃,崩溃原因是调用了 conn->peerAddress() 方法。为什么这个方法的调用可能会引起崩溃?现在可以一目了然地看出了吗?

2.6K31

C++智能指针学习(一)

前言: 大家好,今天继续给大家分享一篇cpp文章,最近也在复习关于STL的基础知识,后期会分享这块的知识,今天分享这篇文章后,继续总结一下音视频里面的同步知识点,这篇文章明天早上发布出来。...如果您在看完文章或者看的过程中,有任何疑问都可以私聊,可以相互探讨,一起进步!...上面说到c++的新的特性学习,但是在嵌入式领域,c++还不会用太新的版本,但是作为自身学习的话,新的东西,还是要去探索学习的,紧跟技术发展,为此发现这两个学习c++的网站不错,一个是cplusplus...由于 std::auto_ptr 这种不常用的复制语义,我们应该避免在 stl 容器中使用 std::auto_ptr,例如我们绝不应该写出如下代码: std::vector<std::auto_ptr...所以在 C++11及后续语言规范中 std::auto_ptr 已经被废弃,你的代码不应该再使用它。

64520

C++ 智能指针

今天之前对这个概念也很陌生,但是接触之后便很喜欢这种指针了。 与其说是指针,不如说是一种基于指针的模板类。 智能指针存在的意义? 俗话说存在即合理,那么这个模板存在的意义是什么?...以前是觉得有没有delete不重要,后来知道必须要delete了,但是会忘记啊。。。 如果有人觉得为什么会忘记?...这正是auto_ptr、unique_ptr和shared_ptr背后的故事。...上面是auto_ptr的示例,另外两个也是一样的。 那怎么用呢? 要创建智能指针对象,首先要包它们的头文件memory....这应该也是比较关心的问题吧。 指针的作用域结束时它就自己清理了。至于如果有人非要手动去释放,那我个人建议你用普通指针。

54510

是否能在构造函数,析构函数中抛出异常?

所以索性整理下来,以便自己明确。      首先是析构函数。 一.  析构函数      参照《Effective C++》中条款08:别让异常逃离析构函数。    总结如下:      1....虽然C++并不禁止析构函数抛出异常,但这样会导致程序过早结束或出现不明确的行为。      2. 如果某个操作可能会抛出异常,class应提供一个普通函数(而非析构函数),来执行该操作。...使用auto_ptr???) 最后总结如下: 1. 构造函数中尽量不要抛出异常,能避免的就避免,如果必须,要考虑不要内存泄露! 2. 不要在析构函数中抛出异常! 本文参考: 1....C++ 构造函数抛出异常会引起内存泄漏?

3.4K50
领券