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

如何故意删除boost :: shared_ptr?

在 C++ 中,boost::shared_ptr 是一个智能指针,用于管理动态分配的对象的生命周期。当最后一个 boost::shared_ptr 指向对象时,对象会自动释放。如果你想故意删除一个 boost::shared_ptr,可以通过以下方法:

  1. 使用 reset() 方法将其指向一个空指针:
代码语言:cpp
复制
boost::shared_ptr<MyObject> ptr(new MyObject());
ptr.reset();
  1. boost::shared_ptr 赋值给一个空的 boost::shared_ptr
代码语言:cpp
复制
boost::shared_ptr<MyObject> ptr(new MyObject());
boost::shared_ptr<MyObject> emptyPtr;
ptr = emptyPtr;
  1. 使用 release() 方法释放所有权,并返回指向对象的原始指针:
代码语言:cpp
复制
boost::shared_ptr<MyObject> ptr(new MyObject());
MyObject* rawPtr = ptr.release();
delete rawPtr; // 需要手动删除对象

请注意,在删除 boost::shared_ptr 之后,你需要确保不再使用它,因为它已经指向了一个已释放的对象,这可能导致未定义的行为。

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

相关·内容

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

从上面的话可以得知当调用reset() 函数时也能够释放堆对象,如何实现的呢?...,而数组对象必须通过deletep[]来删除,因此boost::scoped_ptr是不能管理数组对象的,如果 要管理数组对象需要使用boost::scoped_array类。...boost::scoped_ptr和std::auto_ptr的功能和操作都非常类似,如何在他们之间选取取决于是否需要转移所管理的对象的所有权(如是否需要作为 函数的返回值)。...,使用的是编译器默认的拷 贝构造函数,那如何跟踪呢?...boost::shared_ptr并不是绝对安全,下面几条规则能使我们更加安全的使用boost::shared_ptr: 避免对shared_ptr所管理的对象的直接内存管理操作,以免造成该对象的重释放

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

    从上面的话可以得知当调用reset() 函数时也能够释放堆对象,如何实现的呢?...,而数组对象必须通过deletep[]来删除,因此boost::scoped_ptr是不能管理数组对象的,如果 要管理数组对象需要使用boost::scoped_array类。...boost::scoped_ptr和std::auto_ptr的功能和操作都非常类似,如何在他们之间选取取决于是否需要转移所管理的对象的所有权(如是否需要作为 函数的返回值)。...本想跟踪shared_ptr 的拷贝构造函数,在当行设置断点后F11直接跳过了,说明是shared_ptr类没有实现拷贝构造函数,使用的是编译器默认的拷 贝构造函数,那如何跟踪呢?...boost::shared_ptr并不是绝对安全,下面几条规则能使我们更加安全的使用boost::shared_ptr: 避免对shared_ptr所管理的对象的直接内存管理操作,以免造成该对象的重释放

    6.3K20

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

    从上面的话可以得知当调用reset() 函数时也能够释放堆对象,如何实现的呢?...,而数组对象必须通过deletep[]来删除,因此boost::scoped_ptr是不能管理数组对象的,如果 要管理数组对象需要使用boost::scoped_array类。...boost::scoped_ptr和std::auto_ptr的功能和操作都非常类似,如何在他们之间选取取决于是否需要转移所管理的对象的所有权(如是否需要作为 函数的返回值)。...本想跟踪shared_ptr 的拷贝构造函数,在当行设置断点后F11直接跳过了,说明是shared_ptr类没有实现拷贝构造函数,使用的是编译器默认的拷 贝构造函数,那如何跟踪呢?...boost::shared_ptr并不是绝对安全,下面几条规则能使我们更加安全的使用boost::shared_ptr: 避免对shared_ptr所管理的对象的直接内存管理操作,以免造成该对象的重释放

    1.6K00

    【C++高阶】深入理解C++智能指针:掌握RAII与内存安全的利器

    搞出了更好用的scoped_ptr/shared_ptr/weak_ptr 之后C++11借鉴了boost库中智能指针, C++11搞出unique_ptr/shared_ptr/weak_ptr...shared_ptr设计了一个删除器来解决一些不是new出来的对象的智能指针管理 仿函数的删除器 (C++): template struct DelArray { void operator...()(T* ptr) { delete[] ptr; } }; 在增加删除器后,shared_ptr的参数变多了,因此我们还要修改一下shared_ptr的模拟实现 template<class...C++11和boost中智能指针的关系 C++ 98 中产生了第一个智能指针auto_ptr C++ boost给出了更实用的scoped_ptr和shared_ptr和weak_ptr C++ TR1...不过注意的是TR1并不是标准版 C++ 11,引入了unique_ptr和shared_ptr和weak_ptr 在C++ 11中,需要注意的是unique_ptr对应boost的scoped_ptr

    12310

    C++ 智能指针详解

    PrintSomething: Addition PrintSomething: Addition other ~Simple: 1 上述为正常使用 std::auto_ptr 的代码,一切似乎都良好,无论如何不用我们显示使用该死的...4、boost::shared_ptr boost::shared_ptr 属于 boost 库,定义在 namespace boost 中,包含头文件#include<boost/smart_ptr.hpp...boost::shared_ptr 提供了一个函数 use_count() ,此函数返回 boost::shared_ptr 内部的引用计数。...boost::weak_ptr 是 boost::shared_ptr 的观察者(Observer)对象,观察者意味着 boost::weak_ptr 只对 boost::shared_ptr 进行引用...,用于指向子类的boost::shared_ptr,这样基类仅仅观察自己的 boost::weak_ptr 是否为空就知道子类有没对自己赋值了,而不用影响子类 boost::shared_ptr 的引用计数

    1.9K10

    C++ 智能指针

    PrintSomething: Addition PrintSomething: Addition other ~Simple: 1 上述为正常使用 std::auto_ptr 的代码,一切似乎都良好,无论如何不用我们显示使用该死的...boost::shared_ptr boost::shared_ptr 属于 boost 库,定义在 namespace boost 中,包含头文件 #include<boost/smart_ptr.hpp...boost::shared_ptr 提供了一个函数 use_count() ,此函数返回 boost::shared_ptr 内部的引用计数。...boost::weak_ptr 是 boost::shared_ptr 的观察者(Observer)对象,观察者意味着 boost::weak_ptr 只对 boost::shared_ptr 进行引用...,用于指向子类的 boost::shared_ptr,这样基类仅仅观察自己的 boost::weak_ptr 是否为空就知道子类有没对自己赋值了,而不用影响子类 boost::shared_ptr 的引用计数

    1K40

    C++智能指针

    6、std::weak_ptr 7、删除器 8、C++11和boost中智能指针的关系 零、前言 本章主要讲解学习C++中智能指针的概念及使用 一、为什么需要智能指针 示例: double Division..._pCount; } private: T* _ptr; int* _pCount; }; 7、删除器 概念及引入: 对于管理的资源并不一定就只是通过new出来的,还存在其他的方式获取的资源对象该如何通过智能指针管理呢...这里就需要shared_ptr设计一个删除器来解决,对于不一样的资源使用其对应的方式进行资源的回收 示例: // 仿函数的删除器 template struct FreeFunc {...中智能指针的关系 C++ 98 中产生了第一个智能指针auto_ptr C++ boost给出了更实用的scoped_ptr和shared_ptr和weak_ptr C++ TR1,引入了shared_ptr...并且这些智能指针的实现原理是参考boost中的实现的

    60620
    领券