如何从 boost::shared_ptr 释放指针?

2024-04-16

boost::shared_ptr 可以释放存储的指针而不删除它吗?

我可以看到文档中不存在释放函数,并且在常见问题解答中也解释了为什么它不提供释放函数,例如不能在不唯一的指针上完成释放。我的指点是独一无二的。我怎样才能释放我的指针? 或者使用哪个 boost 智能指针类来允许我释放指针? 我希望你不会说使用 auto_ptr :)


不。 Boost 的常见问题解答条目:

Q。为什么shared_ptr不提供release()函数?

A. 共享指针不能放弃所有权,除非它是 unique(),因为另一个副本仍然会销毁该对象。

考虑:

shared_ptr<int> a(new int);
shared_ptr<int> b(a); // a.use_count() == b.use_count() == 2

int * p = a.release();

// Who owns p now? b will still call delete on it in its destructor.

此外,release() 返回的指针很难可靠地释放,因为源共享指针可能是使用自定义删除器创建的。

因此,如果它是唯一指向您的对象的shared_ptr实例(当unique()返回true时)并且该对象不需要特殊的删除器,那么这是安全的。如果您使用这样的 .release() 函数,我仍然会质疑您的设计。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 boost::shared_ptr 释放指针? 的相关文章

  • 访问二维数组的一行末尾之后的元素是否是 UB?

    以下程序的行为是否未定义 include
  • 使用 Xlib 捕获鼠标

    我想编写一个简单的 Xlib 程序来改变鼠标行为 举个例子 反转垂直移动 我在捕获事件时遇到问题 我想要代码 捕获控制器位置的变化 我向上移动鼠标 MotionEvent 计算新的光标位置 new x difference x 设置新的光标
  • M1 MacBook Pro 和 cmake 的编译错误

    我刚刚拿到了新的 M1 MacBook Pro 正在尝试编译大学工作所需的代码库 以下是我已采取的步骤 我使用 Rosetta 将终端设置为始终打开 安装的自制程序using bin bash c curl fsSL https raw g
  • 测试 WebApi 控制器时如何生成 Asp.net 用户身份

    我正在使用 Web API 2 在 web api 控制器中我使用过GetUserId使用 Asp net Identity 生成用户 ID 的方法 我必须为该控制器编写 MS 单元测试 如何从测试项目访问用户 ID 我在下面附上了示例代码
  • MDI应用程序中父窗体的问题

    我使用按钮作为容器中的控件 父窗体 当子窗体出现时 父窗体中的控件 按钮 图片 标签 出现在子窗体上并将其覆盖 我看不到子窗体 有谁知道如何防止这种情况 我不想将这些控件设置为 Control Visible false 因为当我最小化子表
  • 接收UDP数据包

    假设我的程序通过网络 UDP 发送 1000 字节 它是否保证接收方将 一批 接收 1000 个字节 或者他可能需要执行多次 读取 直到收到完整的消息 如果后者为真 我如何确保同一消息的数据包顺序不会 混淆 按顺序 或者协议可能保证这一点
  • std::vector 错误 C2582:“operator =”函数在以下位置不可用

    我使用简单的向量push back到类型A的对象 并收到此错误 这是我的代码 class A public A int a int b int c include A h std vector a vec objects new std v
  • FormsAuthentication.SetAuthCookie() 是否需要重定向?

    检查用户的凭据并确认其良好后 我正在使用FormsAuthentication SetAuthCookie Username false 对用户进行身份验证 然后在母版页中我使用Page User Identity IsAuthentica
  • 包含不同类型的两个集合相交

    假设我有一个集合 称之为ids它是类型IEnumerable
  • 如何使用最小起订量模拟 Controller.User

    我有几个 ActionMethods 查询 Controller User 的角色 如下所示 bool isAdmin User IsInRole admin 在这种情况下可以方便地行事 我开始使用这样的代码对这些方法进行测试 TestMe
  • 使用 ASP.NET Core Identity 将令牌保存在 Cookie 中

    我想在我的 身份 生成的 cookie 中保存一些内容 我目前正在使用文档中的默认身份设置 启动 cs services Configure
  • IBM Rhapsody 中状态图终止连接器的理解

    在IBM Rhapsody中 如果我使用new创建了一个类的实例 那么我们是否必须通过调用delete来处理内存的释放 或者Termination Connector将在其状态图中通过内存释放来处理其销毁 如果您使用 C 和 OXF 对象执
  • 非数字输入导致死循环

    由于某种原因 如果用户输入了错误的数据类型 例如 j 或 循环将停止要求输入并继续显示 Enter an integer gt 一遍又一遍 如何让程序处理错误的输入 为什么输入非数字值会导致如此奇怪的行为 define SENTINEL 0
  • 将对象转换为泛型类型

    我已经有一段时间没有睡觉了 所以这可能比我想象的要容易 我有一个通用类或多或少是这样的 public class Reference
  • LINQ 表达式树 Any() 位于Where() 内

    我正在尝试生成以下 LINQ 查询 Query the database for all AdAccountAlerts that haven t had notifications sent out Then get the entity
  • MDI 窗体中的子窗口对接

    我有一个 MDI 表单和其中的一些子表单 我将子窗体停靠到 MDI 窗口的不同区域 但是当任何子窗体失去焦点时 其他停靠的窗体将重新排列 由于混乱 我准备了一组图像来展示该行为 Image1 单击任何窗口之前 Image2 点击窗口2后 问
  • 引用计数类和多线程

    我是多线程编程的新手 对此我仍然感到困惑 下面是我的引用计数类 class Rbuffer private char m pnData volatile unsigned int mRefCount public Rbuffer int n
  • 将 tiff 像素长宽比更改为正方形

    我正在尝试对多页 tiff 文件执行条形码识别 但是 tiff 文件是从传真服务器 我无法控制 发送给我的 该服务器以非方形像素长宽比保存 tiff 这导致图像由于纵横比而被严重挤压 我需要将 tiff 转换为方形像素长宽比 但不知道如何在
  • Security.h 中结构的 macOS 文档

    我正在尝试使用Security h通过 Java 和 JNA 的 macOS 框架 这意味着我需要将某些结构重建为 Java 类 问题是 当我查看文档中的结构时 this one https developer apple com refe
  • C++ 模板类问题中的类型条件

    使用海湾合作委员会4 2 我有这个条件类型的元模板 template

随机推荐

  • 如何从 C# 将生成的 pdf 文件作为电子邮件附件发送?

    我有生成 pdf 文件的代码 我想将其作为电子邮件的附件发送 我有这个代码 FileContentResult fileContentResult File fileName application pdf file pdf 我有这个代码可
  • 绑定到具有可选值类型的 SOAP 服务

    我有一个使用以下代码生成 SOAP 服务的方法WSDL
  • 如何使表单中的值文本变为斜体

    我有一个脚本 当用户单击字段时 它会删除表单中的默认值文本 但如何使值文本以斜体显示 如果我将 css 中的输入更改为 font style italic 那么当用户键入时 它也会以斜体显示 我只希望 预览文本 为斜体 然后在用户键入时正常
  • 使用 sqlalchemy 从 PostgreSQL 查询返回 Pandas 数据帧

    我想查询 PostgreSQL 数据库并将输出作为 Pandas 数据框返回 我使用 SqlAlchemy 创建了与数据库的连接 from sqlalchemy import create engine engine create engi
  • 是否可以在 C++ 中禁用 stderr?

    我使用 libxml2 为 html 解析编写了一个 Linux 程序 尽管 html 解析器完成了它的工作 但它还是将许多不同的错误写入 stderr 是否可以完全禁用 stderr 或将其重定向到 dev null 而不必使用重定向 s
  • PHP如何在弹出模式中获取用户ID(变量)

    许多员工及其信息显示在页面上 员工信息通过数据库检索 然后通过foreach 循环用于显示符合搜索条件的所有员工 示例如下图所示 现在 当用户单击按钮时 会触发一个简单的 Bootstrap 弹出模式 其中包含一些基本表单字段 从下面的示例
  • 如果过去 60 分钟的交易量小于 x,如何在 Seyren with Graphite 中发出警报?

    我正在使用 Graphite Statsd 带有 Python 客户端 从 Web 应用程序收集自定义指标 成功交易的计数器 假设计数器是stats transactions count 还有一个每秒速率指标stats transactio
  • 链接器输入文件未使用的 c++ g++ make 文件

    我无法弄清楚是什么导致了我在制作项目时不断遇到的错误 i686 apple darwin11 llvm g 4 2 lncurses linker input file unused because linking not done 我的
  • 自执行功能不起作用?

    我有代码 function i alert i 3 我不明白为什么我看不到警报 这个语法是什么意思 以及为什么这段代码 function i alert i 3 有效吗 有什么不同 我缺少什么 第一个片段将被解释为函数声明 它需要一个名称
  • gitlab-ci.yml&docker-in-docker(dind)&curl 在共享运行器上返回连接被拒绝

    我正在尝试创建一个简单的 GitLab CI 在其中使用 docker compose up 启动一个容器 然后尝试使用curl 访问它 最后使用 docker compose down 将其拆除 docker compose up 旋转得
  • 使用小数分隔符和千位分隔符验证小数

    您好 我使用这个正则表达式来验证带有小数分隔符和千位分隔符的数字 ets eds 0 9 ets eds 0 9 但是这个fail 它不应该接受 对于我的两个单元测试用例 12 and 1 2 有人可以帮忙吗 注意 这项工作适用于1 2 让
  • 如何使用node.js驱动程序复制mongodb集合?

    有没有办法通过 Node js mongodb 驱动程序复制集合 i e collection copyTo duplicate collection 您可以评估copyTo 服务器端虽然它会阻止整个 mongod 进程并且不会在新集合上创
  • 中小型 .NET 应用程序的数据库(和 ORM)选择

    我需要开发一个基于 NET 的应用程序 其数据需求可能超过 SQL 2005 Express Edition 的 4 gig 限制 由于内部 DBA 的专业知识 同一应用程序的其他客户 将来 可能需要使用特定的数据库平台 例如 Oracle
  • 在 Rails 表单错误消息中显示链接

    在我们的注册表单上 我们validates uniqueness of email 当用户尝试使用我们的注册表单并指定现有的电子邮件地址时 我希望他们看到这样的错误消息 该邮件地址已被使用 如果您在登录时遇到问题 您可以重置你的密码 htt
  • 如何计算闰年?

    我对闰年有一些疑问 如何通过使用这样的公式来确定 add years function x y if isTRUE all equal y round y stop Argument y must be an integer n x lt
  • UIImageview 以快速编程方式

    我只是想创建一个UIImage以编程方式查看 我有一个新视图 我尝试这样做 let imageName yourImage png view backgroundColor UIColor colorWithPatternImage UII
  • 如何使用maven pom.xml创建jar

    我需要一个示例 pom 文件来为我的 spring 项目创建 jar 文件 创建jar文件时如何指定创建资源的目录和文件夹 我可以使用 pom jar 文件创建 jar 文件 但我需要将 applicationContext xml 包含在
  • 在 PHP 中使用 pthreads 创建异步超时

    我正在尝试在 PHP 中创建某种异步超时 我使用 PECL 扩展 pthreads 来实现多线程 异步超时工作正常 但参考却不然 我使用 PHP 5 5 8 进行此测试 class ParentClass public test publi
  • tensorflow conv2d偶数步长和奇数步长之间的不同起始索引

    据我了解从tf nn conv2d 文档 https www tensorflow org api docs python tf nn conv2d对于相同的卷积 无论步幅如何 第一个点积应以 0 0 为中心 正如您在下面看到的 当步幅为奇
  • 如何从 boost::shared_ptr 释放指针?

    boost shared ptr 可以释放存储的指针而不删除它吗 我可以看到文档中不存在释放函数 并且在常见问题解答中也解释了为什么它不提供释放函数 例如不能在不唯一的指针上完成释放 我的指点是独一无二的 我怎样才能释放我的指针 或者使用哪