首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带有boost :: shared_ptr的NULL指针?

带有 boost::shared_ptr 的 NULL 指针是一个智能指针,它可以自动管理对象的内存,并在不再使用时自动释放。在 C++ 中,boost::shared_ptr 是一个非常有用的工具,可以帮助开发人员避免内存泄漏和悬空指针。

在使用 boost::shared_ptr 时,可以将 NULL 指针传递给它,以表示该指针没有指向任何对象。例如:

代码语言:cpp
复制
boost::shared_ptr<MyClass> ptr(NULL);

这将创建一个 boost::shared_ptr 对象,该对象没有指向任何对象。在这种情况下,boost::shared_ptr 对象的引用计数为 0,并且在删除对象时不会执行任何操作。

需要注意的是,在使用 boost::shared_ptr 时,应该避免将 NULL 指针传递给它。相反,应该使用 boost::shared_ptr 的构造函数来创建对象,并让它自动管理对象的内存。例如:

代码语言:cpp
复制
boost::shared_ptr<MyClass> ptr(new MyClass());

这将创建一个新的 MyClass 对象,并将其指针传递给 boost::shared_ptr 对象,以便它可以自动管理对象的内存。在这种情况下,boost::shared_ptr 对象的引用计数将为 1,并且在删除对象时将自动释放内存。

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

相关·内容

boost 智能指针 shared_ptr

但只有 shared_ptr 是最接近普通指针的一种智能指针,他具有一些非常良好的特性,比如计数器等等,使用 shared_ptr 可以让我们不用花费精力在内存回收上。...其他的一些指针与 shared_ptr 的区别如下表: 本文主要介绍 shared_ptr 的一些特性,以后如果你使用到 boost 库,那么用到这个智能指针也会是最多的。...2、boost::shared_ptr不需要手动的调用类似release****方法: 它不像侵入式实现的智能指针一样需要手动的调用类似release方法,全部用由shared_ptr内部的计数器自动增减...(COM的IUnknow接口以及boost::intrusive_ptr都是基于侵入式设计的智能指针,需要手动调用类似release方法) 3、boost::shared_ptr支持所有权转移: 并且可以安全的存储在...; boost::shared_ptr ptr_MyClass(new MyClass()); ptr_obj = ptr_MyClass; ptr_obj->func(); // 智能指针避免普通指针和智能指针混用

24310

NULL指针的奇妙之旅

今天带大家了解下NULL指针是如何形成的? 当然了我们要深入到操作系统中去看看为何访问一个NULL指令会报Segment Fault的错误。...想必大家在接触计算机时都写过NULL指针的程序,尤其是玩C语言的小伙伴们。比如刚初始化的一个int类型指针,还没给分配内存空间时就往这个指针赋值,然后运行就会出现Segment Fault的错误。.../a.out运行,在操作系统中bash就用来负责创建一个子进程,这个子进程就是我们的NULL指针程序。至于如何去创建一个子进程,可以去翻阅进程创建的相关文章。...当创建一个子进程后,会通过exec程序来装载该NULL指针程序的内容。当程序运行起来后,操作系统就会为NULL指针程序load好各个段 ?...至此一个简单的NULL指针的旅行就完毕了,可见还是相当的复杂的。

1.2K21
  • 从零开始学C++之boost库(一):详解 boost 库智能指针(scoped_ptr 、shared_ptr 、weak_ptr 源码分析)

    一、boost 智能指针 智能指针是利用RAII(Resource Acquisition Is Initialization:资源获取即初始化)来管理资源。关于RAII的讨论可以参考前面的文 章。...在使用boost库之前应该先下载后放在某个路径,并在VS 包含目录中添加。下面是boost 库里面的智能指针: ?...boost::shared_ptr并不是绝对安全,下面几条规则能使我们更加安全的使用boost::shared_ptr: 避免对shared_ptr所管理的对象的直接内存管理操作,以免造成该对象的重释放...但手动释放不仅麻烦而且容易出错,这里主要介绍一下弱引用智能指针 weak_ptr 的用法,下面是简单的定义: namespace boost {     template指针,跟踪起来难度很大,我也没什么心情像分析 shared_ptr 一样画多个图来解释流程,这个例子需要解释的代码远远比shared_ptr

    1.7K00

    从零开始学C++之boost库(一):详解 boost 库智能指针(scoped_ptr 、shared_ptr 、weak_ptr 源码分析)

    一、boost 智能指针 智能指针是利用RAII(Resource Acquisition Is Initialization:资源获取即初始化)来管理资源。关于RAII的讨论可以参考前面的文 章。...总结一下: 和前面介绍的boost::scoped_ptr相比,boost::shared_ptr可以共享对象的所有权,因此其使用范围基本上没有什么限制(还是有一些需要遵循的 使用规则,下文中介绍)...boost::shared_ptr并不是绝对安全,下面几条规则能使我们更加安全的使用boost::shared_ptr: 避免对shared_ptr所管理的对象的直接内存管理操作,以免造成该对象的重释放...但手动释放不仅麻烦而且容易出错,这里主要介绍一下弱引用智能指针 weak_ptr 的用法,下面是简单的定义: namespace boost { template指针,跟踪起来难度很大,我也没什么心情像分析 shared_ptr 一样画多个图来解释流程,这个例子需要解释的代码远远比shared_ptr 多,这里只是解释怎样使用,有兴趣的朋友自 己去分析一下

    1.4K30

    Boost C++ 库 | 智能指针(共享指针、共享数组、弱指针、介入式指针、指针容器)入门

    它可以和其他 boost::shared_ptr 类型的智能指针共享所有权。在这种情况下,当引用对象的最后一个智能指针销毁后,对象才会被释放。...因为所有权可以在 boost::shared_ptr 之间共享,任何一个共享指针都可以被复制,这跟 boost::scoped_ptr 是不同的。...一旦初始化之后,它基本上只提供一个有用的方法: lock()。此方法返回的boost::shared_ptr 与用来初始化弱指针的共享指针共享所有权。...通过调用弱指针的 lock() 函数可以解决这个问题:如果对象存在,那么 lock() 函数返回的共享指针指向这个合法的对象。否则,返回的共享指针被设置为0,这等价于标准的null指针。...04、介入式指针>>>大体上,介入式指针的工作方式和共享指针完全一样。 boost::shared_ptr 在内部记录着引用到某个对象的共享指针的数量,可是对介入式指针来说,程序员就得自己来做记录。

    17710

    C++ 智能指针详解

    智能指针包含了 reset() 方法,如果不传递参数(或者传递 NULL),则智能指针会释放当前管理的内存。如果传递一个对象,则智能指针会释放当前对象,来管理新传入的对象。...由于 boost::scoped_ptr 独享所有权,当我们真真需要复制智能指针时,需求便满足不了了,如此我们再引入一个智能指针,专门用于处理复制,参数传递的情况,这便是如下的boost::shared_ptr...当我们需要使用一个共享对象的时候,boost::shared_ptr 是再好不过的了。 在此,我们已经看完单个对象的智能指针管理,关于智能指针管理数组,我们接下来讲到。...至此,我们讲过的智能指针有std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::scoped_array、boost::shared_array...似乎boost::scoped_ptr、boost::shared_ptr 这两个智能指针就可以解决所有单个对象内存的管理了,这儿还多出一个 boost::weak_ptr,是否还有某些情况我们没纳入考虑呢

    2K10

    C++ 智能指针

    智能指针包含了 reset() 方法,如果不传递参数(或者传递 NULL),则智能指针会释放当前管理的内存。如果传递一个对象,则智能指针会释放当前对象,来管理新传入的对象。...由于 boost::scoped_ptr 独享所有权,当我们真真需要复制智能指针时,需求便满足不了了,如此我们再引入一个智能指针,专门用于处理复制,参数传递的情况,这便是如下的boost::shared_ptr...当我们需要使用一个共享对象的时候,boost::shared_ptr 是再好不过的了。 在此,我们已经看完单个对象的智能指针管理,关于智能指针管理数组,我们接下来讲到。...至此,我们讲过的智能指针有std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::scoped_array、boost::shared_array...似乎 boost::scoped_ptr、boost::shared_ptr 这两个智能指针就可以解决所有单个对象内存的管理了,这儿还多出一个 boost::weak_ptr,是否还有某些情况我们没纳入考虑呢

    1K40

    4.2 C++ Boost 内存池管理库

    boost::shared_ptr是Boost库中的一个智能指针,用于自动管理动态分配的内存。...该函数是boost.smart_ptr库中最重要的智能指针,shared_ptr包装了new操作符在堆上分配的动态对象,实现了引用计数型的智能指针,可被自由的拷贝和赋值,并在任意地方共享。...如下代码所示,我们使用shared_ptr封装接口,让impl类不再返回原始指针,而是返回shared_ptr包装的智能指针,这样就可以很好的保护资源。...weak_ptr是C++11中的智能指针,它用于解决shared_ptr可能引起的循环引用问题。...如果简单来说,这个指针的出现只是为了配合shared_ptr使用的,其本身并不具备普通指针的行为,其主要的作用在于协助shared_ptr工作,像旁观者一样观察资源的使用情况。

    91440

    使用 C++ 智能指针遇到的坑

    使用 C++ 智能指针遇到的坑 阅读收益 智能指针目的就是代替原始指针,那么问题来了,原始指针都可以用智能指针代替吗?...用weak_ptr解决shared_ptr的环形引用问题(避免内存泄露,无法调用析构函数) unique_ptr 不使用条件(需要改写):容器里存放指针。...unique_ptr默认不能copy,如果一次使用 禁止拷class 虽然move实现拷贝,unique_ptr原来指针为null,有core的风险。解决办法:实现智能指针的深度拷贝。...但是在实际的使用过程中,很多人都会有这样的问题: 不知道三种智能指针的具体使用场景 无脑只使用 shared_ptr 认为应该禁用 raw pointer(裸指针,即 Widget * 这种形式),全部使用智能指针...boost\smart_ptr\weak_ptr.hpp 如果 weak_ptr 指向某一 shared_ptr 指针拥有的堆内存, 则 weak_ptr 也指向该块存储空间(可以访问,但无所有权) weak_ptr

    2.8K50

    4.2 C++ Boost 内存池管理库

    boost::shared_ptr是Boost库中的一个智能指针,用于自动管理动态分配的内存。...该函数是boost.smart_ptr库中最重要的智能指针,shared_ptr包装了new操作符在堆上分配的动态对象,实现了引用计数型的智能指针,可被自由的拷贝和赋值,并在任意地方共享。...如下代码所示,我们使用shared_ptr封装接口,让impl类不再返回原始指针,而是返回shared_ptr包装的智能指针,这样就可以很好的保护资源。...weak_ptr是C++11中的智能指针,它用于解决shared_ptr可能引起的循环引用问题。...如果简单来说,这个指针的出现只是为了配合shared_ptr使用的,其本身并不具备普通指针的行为,其主要的作用在于协助shared_ptr工作,像旁观者一样观察资源的使用情况。

    34920

    从零开始学C++之boost库(一):详解 boost 库智能指针

    关于RAII的讨论可以参考前面的文 章。在使用boost库之前应该先下载后放在某个路径,并在VS 包含目录中添加。下面是boost 库里面的智能指针: ?...总结一下: 和前面介绍的boost::scoped_ptr相比,boost::shared_ptr可以共享对象的所有权,因此其使用范围基本上没有什么限制(还是有一些需要遵循的 使用规则,下文中介绍)...boost::shared_ptr并不是绝对安全,下面几条规则能使我们更加安全的使用boost::shared_ptr: 避免对shared_ptr所管理的对象的直接内存管理操作,以免造成该对象的重释放...但手动释放不仅麻烦而且容易出错,这里主要介绍一下弱引用智能指针 weak_ptr 的用法,下面是简单的定义: namespace boost { template指针,跟踪起来难度很大,我也没什么心情像分析 shared_ptr 一样画多个图来解释流程,这个例子需要解释的代码远远比shared_ptr

    6.7K20

    【C++】智能指针

    shared_ptr 是C++11设计出来的智能指针,他的名字翻译出来是共享指针,他的特点是⽀持拷⻉, 也⽀持移动。如果需要拷⻉的场景就需要使⽤他了。底层是⽤引⽤计数的⽅式实现的。...中智能指针的关系 Boost库是为C++语⾔标准库提供扩展的⼀些C++程序库的总称,Boost社区建⽴的初衷之⼀就是为 C++的标准化⼯作提供可供参考的实现,Boost社区的发起⼈Dawes本⼈...在Boost库的开发中,Boost社区也在这个⽅向上取得了丰硕的成果,C++11及之后的新语法 和库有很多都是从Boost中来的。...C++ boost给出了更实⽤的scoped_ptr/scoped_array和shared_ptr/shared_array和weak_ptr等....需要注意的是unique_ptr对应boost的 scoped_ptr。并且这些智能指针的实现原理是参考boost中的实现的。

    3400
    领券