为什么 C++11 允许 GC? [关闭]

2024-01-24

C++11 允许其实现执行(某些)垃圾收集实用程序。为什么标准会允许这样做?我一直有这样的印象:在 C++ 中,你不需要为不使用的东西付费。对我来说,(隐含的)GC 感觉它破坏了这种意识形态。此外,通过智能指针在 C++ 中编写和使用显式垃圾收集实用程序并不困难。

其次,GC会让一些原本有效的程序变得无效。示例包括指针屏蔽和相关的低级指针“黑客”。

int * nums = new int[10];
nums += 2;
*nums = 777; // nothing points to the new'ed int[10] at this point
// oh no! nums could have gotten collected!!! (so lets assume it was)
*nums = 666; // crash (or memory corruption (or something else that's bad))

C++11 标准并不要求 GC 存在,但在未来的版本中可能会存在。

它不会强加于你——只有当你要求它时它才会在那里。它不会收集您的普通指针,也不会收集当前的智能指针。所以,它仍然是“不使用 - 不付费”。它只会对您明确要求的指针起作用,因此您的示例仍然会像现在一样工作。

See Sutter’s Mill:垃圾收集概要和 C++ http://herbsutter.com/2011/10/25/garbage-collection-synopsis-and-c/

引用计数 (#1) 通常是最好的,并且它是 C++ 的默认值 GC 的形式。但也有理由(而不是相反)想要懒惰 C++ 中的标记-清除 (#2) 垃圾回收来处理 ref 计数无法处理,包括潜在周期的情况 不可避免的(在某些情况下,某些对象可能自然地被共享, 但随后可能会互相引用)和无锁 ABA 问题。

萨特所说的“引用计数”指的是std::shared_ptr和类似的事情。

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

为什么 C++11 允许 GC? [关闭] 的相关文章

  • -ffast-math 可以安全地用于典型项目吗?

    在回答我建议的问题时 ffast math 有评论指出这是危险的 我个人的感觉是 在科学计算之外 是可以的 我还假设严肃的金融应用程序使用定点而不是浮点 当然 如果你想在你的项目中使用它 最终的答案是在你的项目上测试它 看看它有多大影响 但
  • 全局变量不好

    好吧 读完这篇文章和一些示例后 我仍然不清楚全局变量的含义 那么你的类中的私有变量是全局的吗 http www c2 com cgi wiki GlobalVariablesAreBad http www c2 com cgi wiki G
  • 从服务器下载图像(cUrl,但接受建议)C++

    我试图通过从服务器 网站 下载图像来设置旋转背景图像 并尝试使用curl 来执行此操作 但是在执行此操作方面取得了0 成功 我的代码的 缩短的 版本如下 我没有收到错误 但是 如何 临时 保存该图像以将其显示为背景 是否有图像 类型变量 或
  • 如何在建立上下文时设置连接超时-PrincipalContext

    using PrincipalContext ctx new PrincipalContext ContextType Domain Domain UserName Password UserPrincipal U new UserPrin
  • 如何在单例类和未命名类之间进行选择?

    我会使用这样的单例 Singleton single Singleton instance single gt do it 我会使用这样的未命名类 single do it 我觉得单例模式除了具有可读的错误消息之外 与未命名的类相比没有任何
  • MVC BaseController 处理 CRUD 操作

    我想重构我的基本 CRUD 操作 因为它们非常重复 但我不确定最好的方法 我的所有控制器都继承 BaseController 如下所示 public class BaseController
  • 在编译输出中添加程序集绑定 (app.config)

    如果我编译应用程序 则会在输出中自动添加程序集绑定 具体的程序集绑定不在app config在 Visual Studio 中但在创建的应用程序配置中 有什么办法可以检查为什么会自动添加程序集绑定吗 选项AutoGenerateBindin
  • .Net 支持柯里化泛型吗?

    假设我们有一个嵌套的泛型类 public class A
  • 大小为 k 的非连续子序列的最大值的最小值

    在开始之前 我希望这个问题不是重复的 我发现了几个类似的问题 但它们似乎都没有描述完全相同的问题 但如果它是重复的 我会很高兴看到一个解决方案 即使它与我的算法不同 我一直在尝试回答这个问题 https stackoverflow com
  • 现代编译器的 C++ 中“memset”功能的状态

    Context 不久前 我偶然发现了 Alexandrescu 在 2001 年发表的 DDJ 文章 http www ddj com cpp 184403799 http www ddj com cpp 184403799 它是关于比较将
  • 对象变空似乎是 Hangfire 中的反序列化问题

    Hangfire 似乎无法反序列化我的原始版本Scheduler对象及其所有状态 我正在调用其 Execute 方法BackgroundJob Enqueue 如下所示 Scheduler new FileInFileOut FileIn
  • 向客户端发送状态码 500 时页面未呈现

    我有一个页面 通用处理程序 我想在该页面上向客户端返回状态代码 500 以指示出现问题 我这样做 Response StatusCode 500 Response StatusDescription Internal Server Erro
  • ArrayList 有什么问题?

    最近我问了一个关于 SO 的问题 其中提到了可能使用 c ArrayList 来解决问题 有人评论说使用数组列表不好 我想了解更多有关此的信息 我以前从未听说过关于数组列表的这种说法 有人可以带我了解使用数组列表可能出现的性能问题吗 C n
  • 模板类中模板方法专门化的 clang 自动返回类型错误?

    试图理解另一个问题 https stackoverflow com questions 38054055 clang fails to compile template function with auto return type insi
  • 在 OSX 上检测 Objective C 或 C++ 中的文件夹访问(如 fs_usage 命令)

    我正在 OSX 上开发实时病毒扫描程序 OSX 的命令行命令fs usage可以通过以下方式确定文件夹访问权限 并且只能以 root 用户身份运行 fs usage w f pathname grep Users Documents Use
  • Microsoft Visual Studio 2017 中的 wxWidgets 设置

    我花了大约 20 个小时试图弄清楚如何在 Microsoft Visual Studio 2017 中设置 wxWidgets 我遵循 https wiki wxwidgets org Microsoft Visual C 2B 2B Gu
  • 使用属性和性能

    我正在优化我的代码 我注意到使用属性 甚至自动属性 对执行时间有深远的影响 请参阅下面的示例 Test public void GetterVsField PropertyTest propertyTest new PropertyTest
  • 对 Action 方法的两个并行 ajax 请求排队,为什么?

    我正在使用 ASP NET MVC 开发一个视频网站 我希望在我的应用程序中拥有的一项功能是转码视频 但由于转码过程可能非常耗时 我想向客户端用户展示该过程的进度 因此 我的架构是使用一个控制器操作来处理整个转码过程 并将其进度写入存储在服
  • 为什么在一行中使用这个 C++ 函数两次会导致编译错误?

    我在尝试在 Visual C 2010 中实现智能相等测试宏类型模板函数时遇到了一些麻烦 该函数与VS 中关于模板函数默认参数的错误 https stackoverflow com questions 10343177 why do i g
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web

随机推荐

  • StandardTitanGraph java.lang.Throwable:挂钩创建跟踪错误

    我在 Windows 中运行的 scala 项目中遇到以下异常 Titan cassandra DEBUG c t t g database StandardTitanGraph 安装的关闭挂钩 Thread Thread 9 5 main
  • C++ 中多线程的 join() 和 detach() 有什么不同?

    之间有什么不同join and detach 在C 中的多线程中 做join 杀死线程 A C thread对象通常 但不总是 代表一个执行线程 这是一个操作系统或平台概念 When thread join 被调用时 调用线程将阻塞 直到执
  • Google Cloud Endpoints 对 openApi 3 的支持 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 正如文档中所述 Google Cloud Endpoints 支持使用 OpenAPI 规范 2 0 版描述的 API 有计划支持3 0版
  • Solidity如何使用元组(嵌套abi)进行函数签名?

    struct Test uint ui string s function test Test t public emit Log t ui t s 我对ABI有一些了解 我使用实验性 ABIEncoderV2 选项签订了这份合同 总之 这
  • 将 .NET 像素转换为 OpenXML 格式的 Excel 宽度的公式

    我花了很多时间尝试确定使用 OpenXML 格式将 NET 像素转换为 Excel 列宽的公式 我正在使用 EPPlus 生成 xml 文档 我正在尝试确定要自动调整大小的列的宽度 我通过测量字符串来获取像素数 然后尝试将其转换为 Open
  • 调试从非托管 C++ 调用的托管 .NET 代码

    我已经阅读了 SO 上提供的解决方案 但到目前为止没有任何解决方案可以解决我的问题 我的启动项目是一个非托管 C 项目 我们将其称为 TestWrapper 目标是让 TestWrapper 调用托管 C 项目 然后该项目调用我的 C 项目
  • ojdbc14.jar 与 ojdbc6.jar

    我注意到以下差异 但没有在任何地方看到它的记录 我想知道其他人是否注意到了同样的事情 或者可以向我指出一些证明相同的文档 Env Oracle 11g JDK 1 6 iBatis PL SQL 设想 ojdbc14 jar 如果 pl s
  • 无法在 firebase 函数模拟器上提供 Express 应用程序 | EADDRINUSE:地址已在使用 :::3000

    我正在使用 firebase 函数在 firebase 上测试快速应用程序部署 但使用命令后firebase serve 我正进入 状态EADDRINUSE address already in use 3000 这是我的index js
  • Cython:在类型声明中使用导入的类

    我正在编写 Cython 0 23 程序 但我不知道如何使用cdef class我在类型声明中从不同的模块导入 这是重现该问题的片段 test py import pyximport pyximport install from mymod
  • excel vba调用带变量的子程序

    我定义了以下子例程 Sub EnterCellValueMonthNumber cells As range number As Integer range cells Select ActiveCell FormulaR1C1 numbe
  • 如何将 IDbCommandInterceptor 仅挂钩到特定类型的 DbContext?

    目前我正在添加我的实现IDbCommandInterceptor https msdn microsoft com en us library system data entity infrastructure interception i
  • 清除:两者或溢出:自动,哪个更好?

    我真的不明白有什么区别明确 两者 and 溢出 自动 我对其进行了测试 功能的工作方式相同 有人会解释为什么这两者的工作方式相同吗 从我在一些文章和问题中看到的 Overflow auto 可以在内部有浮动的容器中使用 并且使用空 div
  • 使用一个 LINQtoSQL 语句返回不同的对象

    我有一个由员工和学生实施的IPerson 我什么really想要的就是你在下面看到的 一个 LINQ 语句即可获取每种类型的 IPerson 在我调用该方法之前 这非常有效 为什么我会收到错误 这是有道理的 但我真的很难找到一种合适的方法来
  • 如何使用 CSS 和 JavaScript 制作可更改的主题

    我对 CSS 和 JavaScript 还很陌生 我想知道您是否可以制作一个脚本来更改网站使用的样式表 说 你有一个绿色主题 所有东西都是绿色的 您会怎么做 以便用户可以通过按下按钮将其更改为红色 有谁知道如何做到这一点 您可以为链接标签设
  • 创建游戏插件时出现 SerpentAI 错误

    我最近安装了 SerpentAI 但在创建游戏插件时遇到了问题 运行命令时 serpent generate game 我提供以下答案 RaftWars 网页浏览器 What is the name of the game Titleize
  • 如何将跟踪信息保存到文件中

    我正在通过启用跟踪来跟踪我的 ASPX 页面web config
  • 何时对片段使用 onCreateView?

    我正在按照以下步骤操作 http developer android com training basics fragments creating html AddInLayout http developer android com tr
  • “Image Literal”命令在 Xcode 中不起作用

    我开始学习 swift 语言 有一个命令 Image Literal 可以添加图像 但它没有显示任何内容 除此之外 如果我尝试任何其他编码 它会自动得到建议 但图像文字根本不起作用 我正在使用 Xcode 13 任何线索都会非常有帮助 对于
  • Blazor客户端发送电子邮件

    我在 Razor 页面中包含了一个联系表单 以便用户可以在其中填写他的电子邮件 主题和正文 当他提交时 电子邮件会发送到我的电子邮件地址 我的代码看起来像这样example https learn microsoft com fr fr d
  • 为什么 C++11 允许 GC? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi