shared_ptr会自动释放内存吗?

2023-11-23

我需要在这里使用shared_ptr,因为我无法更改API。

Foo1 *foo1 = new Foo1(...);
shared_ptr<Foo2> foo2(foo1);

这里的shared_ptr会处理释放foo1使用的内存吗?如果我理解正确的话,我不应该在 foo1 上调用delete,对吗?


是的。你是对的,但是初始化的正确方法foo2 is:

std::shared_ptr<Foo2> foo2 = std::make_shared<Foo1>();  

Herb Sutter 讨论了您应该使用的原因std::make_shared<>() here: https://herbsutter.com/2013/05/29/gotw-89-solution-smart-pointers/

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

shared_ptr会自动释放内存吗? 的相关文章

  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 现代 C++ 编译器是否能够在某些情况下避免调用 const 函数两次?

    例如 如果我有以下代码 class SomeDataProcessor public bool calc const SomeData d1 const SomeData d2 const private Some non mutable
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 处理右值时的 insert 与 emplace

    std string myString std unordered set
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names

随机推荐

  • 对 UIViewPropertyAnimator 的fractionComplete进行动画处理以模糊背景

    因此 当您在主屏幕上向下滚动并模糊背景时 我使用新的 UIViewPropertyAnimator 和 UIVisualEffectView 来实现与 Spotlight 搜索相同的效果 我使用fractionComplete 属性来设置平
  • Java中的声明和定义有什么区别?

    我对这两个术语感到非常困惑 我查了一下 stackoverflow 发现 C 有类似的问题 但 java 没有 有人能解释一下java这两个术语之间的区别吗 概念上的区别很简单 宣言 你是宣告某些东西存在 例如类 函数或变量 你什么也没说w
  • 如何从 Rails 中的 Warden/Devise after_authentication 回调访问会话

    我正在尝试从 Warden 访问当前会话验证后Rails 3 中的回调 在 Devise 下运行 在我的应用程序控制器的顶部我想做一些类似的事情 Warden Manager after authentication do user aut
  • 带有 ng-repeat 的 bootstrap-label 之间没有间距

    当我使用 angular js 中的 ng repeat 添加标签时 它们显示时没有间距 这里有一个Plunker这证明了这一点 但是如果我手动添加标签 只是复制了 html 那么它们就会显示为空白 有没有一种方法可以在标签之间添加空白而不
  • Ruby 相当于 Python 的 for / else

    我一直在寻找 Ruby 中类似 Python 的 while else 结构的东西来改进我的代码 这意味着执行循环 如果循环中的条件任何时候都不为真 则返回 else 语句中的值 在红宝石中 我可以这样做 if items empty Em
  • 获取Qt 4.8 SDK

    我已经有一段时间没有在 Windows 上使用 Qt 了 我知道现在我们应该从 Qt 项目网站下载开源版本 但页面位于http qt project org downloads具有指向 Qt 库和 Qt Creator 的安装程序的单独链接
  • Perl:将 Unicode 字符串打印到 Windows 控制台

    我在将 Unicode 字符串打印到 Windows 控制台 时遇到一个奇怪的问题 考虑这段文字 Intermediary Bye Hello world test 假设它位于名为 file txt 的文件中 当我 go type file
  • 带有字符串参数的主方法入口点给出“不包含...合适的...入口点”错误

    为什么下面的代码块会给出 不包含适合入口点的静态 Main 方法 的编译错误 namespace MyConApp class Program static void Main string args string tmpString tm
  • 动态添加到 DOM 的元素的单击事件

    在 jQuery 1 8 之前 我能够使用 live 在单击由 jquery 动态插入的按钮时触发 现在 on 和 bind 都不适用于页面加载后添加到 DOM 的元素 现在有哪些选择 parent element on click chi
  • 如何启动kubelet服务?

    我运行命令systemctl 停止 kubelet然后尝试启动它systemctl 启动 kubelet 但无法启动它 这是输出systemctl 状态 kubelet kubelet service kubelet The Kuberne
  • 不区分大小写的 str_replace

    我该如何使用str replace但在搜索字符串时不区分大小写 例如 假设我想替换ABcD with a 结果命令将是 string str replace ABcD a string 但是如果有一些像 abCD 这样的字符串 那么我必须再
  • 如何编辑外部 web.config 文件?

    我正在尝试编写一个 winform 应用程序 该应用程序能够编辑已安装的 Web 应用程序的 web config 文件 我已经通读了 ConfigurationManager 和 WebConfigurationManager 类方法 但
  • Python函数无法访问类变量

    我试图访问外部函数中的类变量 但是我收到 AttributeError 类没有属性 我的代码如下所示 class example def init self somevariable raw input Input something de
  • 从 MySQL 数据库读取 BLOB 图像

    我在从 MySQL 数据库读回 blob 时遇到一些问题 我已将其成功插入数据库 但似乎无法将其读回 我知道你们中的一些人可能会想 为什么他使用数据库来存储图像的 blob 而不仅仅是文件路径 文件名 但我希望具有灵活性 因为许多图像将存储
  • 从选择器 SwiftUI 中取消选择项目

    我使用带有选择器的表单 一切正常 我可以从选择器中选择一个元素 但我无法取消选择它 是否存在从选择器中取消选择项目的方法 谢谢你 Picker selection model countries label Text country For
  • 如何说服詹金斯共享多个作业的内部版本号?

    开发团队确实要求设置构建系统 因此每个构建都将为所有分支提供唯一的构建号 构建是由詹金斯使用每个分支的作业进行的 有一个 jenkins 插件可以为作业设置下一个版本号 但这有点无用 至少有两个原因 它将设置单个作业的内部版本号 您无法知道
  • 执行 SQL Server 脚本

    如何自动运行给定文件夹中的所有 SQL 脚本 编写 Windows 脚本 使用FOR构建循环遍历您的文件并使用SQLCMD执行每个文件的实用程序 for f in c MySQLScripts sql do sqlcmd i f
  • 在 Android 中从文件读取/写入字符串

    我想通过从 EditText 输入的文本将文件保存到内部存储 然后我希望同一个文件以字符串形式返回输入的文本并将其保存到另一个字符串以便稍后使用 这是代码 package com omm easybalancerecharge import
  • 在gradle中重命名apk

    我想从 gradle 重命名我的 apk 我在构建中有以下几行 applicationVariants all variant gt def file variant outputFile def filename file name re
  • shared_ptr会自动释放内存吗?

    我需要在这里使用shared ptr 因为我无法更改API Foo1 foo1 new Foo1 shared ptr