首页
学习
活动
专区
工具
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。这是当今世界上最流行的语言。它相当简单、现代、快速,而且正在进化。有大量的图书馆可以帮助您编写令人惊叹的代码,并且可以方便地在线获取帮助和资料。

1.1K30

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

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

89460

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岁的迷茫,要不要重新选择拼搏一把,要不要离开这个热爱又无奈的城市。你呢? 最后 那么迷茫就不对?...所以呢,迷茫是一件好事?从某种角度来讲,认为是的。 那么作为程序员的你,还在迷茫

82830

C++|智能指针模板类

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

61010

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.7K20

【C++】智能指针

但是我们使用只能指针避免不了以下的场景,当遇到以下场景我们应该如何解决呢?...3. auto_ptr 在学习 auto_ptr 之前,我们可以参考一下文档:std::auto_ptr 文档介绍 C++98 版本的库中就提供了 auto_ptr 的智能指针,但是 auto_ptr...其实是一个失败设计,管理权转移,就是最后一个拷贝对象管理资源,被拷贝对象都被置空,这会导致对象悬空,当出现以下场景的时候,就会对空指针解引用,所以很多公司明确要求不能使用 auto_ptr:...那这个时候应该怎么解决呢?库里面给我们提供了一个具有定制删除器的构造函数,如下: 那么这个定制删除器如何使用呢?...是 D ?那么我们应该如何拿到 D 这个类型呢?D 这个类型的作用域是在该构造函数内,并不是整个类,所以我们也拿不到 D 类型。

10110

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

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

2.9K40

智能指针的讲解

不需要显式地释放资源 2.采用这种方式,对象所需的资源在其生命期内始终保持有效 智能指针就是这种思想的体现: 代码中的sp1和sp2都是一个局部对象,它出栈就会自动调用类的析构函数,释放资源,这样的资源就托管给了类对象...int); *sp1 = 10; cout << *sp1 << endl; SmartPtr sparray(new Date); // 需要注意的是这里应该是...sparray.operator->()->_year = 2018; // 本来应该是sparray->->_year这里语法上为了可读性,省略了一个-> sparray->_year...我们将最后一句代码注释掉,程序可以正常运行,并且可以看到不用显示地清理资源,它自动调用了智能指针的析构函数,这个时候管理权转移的缺点还没有展示出来 当我将最后一句执行语句加上后: 可以看到程序崩溃了,因为解引用了...pa1,而pa1因为拷贝构造函数的管理权转移已经被置空了,如果不熟悉的话,代码就很容易出现问题 所以说:auto_ptr是一个失败设计,很多公司明确要求不能使用auto_ptr 3.4 std:

8310

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

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

80230

详解 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.7K31

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

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

71820
领券