在 C# 中安全,在 C++ 中不安全,简单返回指针/引用

2023-12-08

C++代码:

person* NewPerson(void)
{
  person p;
  /* ... */
  return &p; //return pointer to person.
}

C# code:

person NewPerson()
{
  return new person(); //return reference to person.
}

如果我理解正确的话,C++ 中的例子就不行,因为p将要 超出范围,函数将返回一个野指针(悬空指针)。

C# 中的示例没问题,因为只要存在对匿名新人的引用,它就会保留在作用域内。 (调用函数得到一个。)

我做对了吗?


C++ 中的示例不行,因为“p”将超出范围,并且该函数将返回无效指针。

正确的。

C# 中的示例没问题,因为只要有任何引用,匿名“new Person”就会保留在作用域内。

这或多或少是正确的,但你的术语不太正确。Scope在 C# 中是文本区域,其中不合格名称可以使用。这里的对象没有名称。Lifetime is 保证存储位置有效的运行时间段。范围和生命周期是相关的;当控制离开与某个作用域关联的代码时,通常允许在该作用域内声明的局部变量的生命周期结束。 (在某些情况下,当地人的寿命比控制范围内的时间长或短。)

另外,请注意,它不是any对保持其活动状态的 Person 对象的引用。参考必须是rooted。您可以有两个相互引用但无法访问的 Person 对象;事实上,每个人都有一个参考并不能让他们保持活力;参考文献之一必须是 root 的。

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

在 C# 中安全,在 C++ 中不安全,简单返回指针/引用 的相关文章

  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • Selenium 2:检测链接目标的内容类型

    我正在使用 Selenium 2 Java API 与网页交互 我的问题是 如何检测链接目标的内容类型 基本上 这是背景 在单击链接之前 我想确保响应是 HTML 文件 如果没有 我需要以其他方式处理 假设有一个 PDF 文件的下载链接 应
  • 在 Java 中可视化矢量图形,哪个库?

    我需要可视化一个大的矢量图形 这是一张道路地图 道路只是线条 有图书馆吗 如果该库支持放大 缩小并且易于扩展 那就太好了 例如 实现道路选择或一些不错的鼠标悬停效果 许可证应允许在商业项目中使用 谢谢 菲利普 编辑 有理由不使用 Graph
  • 更改 conda PS1 提示符

    我刚刚安装了新版本的 Conda 22 9 0 我以前的版本用于在 Linux 提示符前面加上激活的 Conda 环境的名称 然而 新版本将整个提示替换为 Conda 环境名称 例如 base 因此 我想自定义提示 我已经使用以下方法完成了
  • 默认 Ruby 未使用 RVM 加载

    不确定此问题是否与最近的 Oh My ZSH 更新有关 但突然间 我的 RVM 默认 Ruby 在打开新的终端窗口时未加载 相反 它加载系统 Ruby 我已经添加了 s HOME rvm scripts rvm HOME rvm scrip
  • 为什么在所有初始订阅者断开连接后 RefCount 不起作用? (还原)

    根据 Lee Campbell 的要求 这是一个后续问题这个原来的 其目的是在我试图解决的用例的背景下提出问题 我有一个WebApiService它封装了原始 Web API 并提供令牌管理 也就是说 它跟踪身份验证令牌 并将其传递给原始
  • std::locale 构造函数在使用 MinGW 编译的程序中抛出异常

    此代码在 MSVC 2022 中运行 并在 MinGW x86 64 w64 mingw32 gcc 12 2 0 中引发运行时错误 include
  • 配置 Notepad++ 在本地主机上运行 php?

    我正在尝试获取选项 运行 gt 使用 Firefox 启动 打开我当前在 Notepad 中查看的文件http 127 0 0 1 8080 currentfile php 但它只是在 Firefox 中打开到当前文件目录 我尝试编辑 No
  • WCF活动宣言

    我发现 WCF 不直接使用事件 而是使用 OneWay 委托调用 但有人可以向我展示一个关于如何执行此操作的简单示例吗 这是我现在的设置 OperationContract IsOneWay true void OnGetMapStoryb
  • 从 IntelliJ 启动 Grails 3 应用程序并启用自动重新加载

    看起来 IntelliJ Ultimate EAP 15 对 Grails 3 的支持还处于早期阶段 如果我做Run gt Debug Grails My App 我可以从 IntelliJ 内部启动应用程序 我可以设置断点并且它按预期工作
  • SimpleDateFormat 解析时忽略月份

    以下代码给出的解析日期为 Wed Jan 13 00 00 00 EST 2010 而不是 2010 年 6 月 13 日星期三 00 00 00 EST 2010 任何想法都非常感激 SimpleDateFormat sf new Sim
  • [SpringBoot]:简单组件无法自动装配 String 类

    我有这个简单的组件类 package jason import org springframework stereotype Component Component public class Messenger private String
  • 转发 C 中可变参数函数的调用

    在C中 是否可以转发可变参数函数的调用 如 int my printf char fmt fprintf stderr Calling printf with fmt s fmt return SOMEHOW INVOKE LIBC PRI
  • 查看子路线时,Ember 隐藏父模板

    我正在使用 Ember 为我的网站制作一个简单的博客 我的路线 Router map function this route home path this route blog function this route post path p
  • 使用 PHP 合并视频文件

    我有两个 mp4 文件 我想合并它们 media1 file get contents SERVER DOCUMENT ROOT dir media1 mp4 media2 file get contents SERVER DOCUMENT
  • webview android kitkat 4.4.2 上的“选择要上传的文件”

    我有一个网络视图 我添加了上传文件的代码 它在 4 3 和 4 2 galaxy s3 上运行良好 但在 4 4 2 上不起作用 如 Galaxy s5 和 lg3 当我单击 选择文件 时 它没有响应并且没有任何反应 这是我的代码 Main
  • 在 Common Lisp 中从文本文件读取数组

    我正在尝试从文本文件读取 Lisp 中的数据 实际上是一个数组 我尝试使用with open file and read line但无法实现我的目标 我正在寻找的东西相当于做data load filename txt 在 MATLAB 中
  • “%matplotlib inline”导致以下代码出错

    如果我注释掉 matplotlib inline 代码运行正常 但是 如果我将 matplotlib inline 保留为未注释 则 fig axes plt subplots nrows x p ncols y p 开始创建空白图 并且以
  • Windows Phone 中的 SQL Server CE 中的 NTEXT 超过 4000 个字符

    Windows Phone 中的 SQL Server CE 中的 NTEXT 超过 4000 个字符 我的 Windows Phone 应用程序中有一个数据库 其中包含ntext其中一个表中的字段 我试图向该字段写入一些内容 但我得到了I
  • 在无限循环中 6 秒后隐藏和取消隐藏文本 (Html)

    您好 我创建了这个脚本来隐藏 6 秒后的文本 但我希望文本必须每 6 秒重新出现并再次消失到无限 我如何创建这种 HTML 脚本 h1 style text align left Hello World h1 您可以根据需要尝试更新的代码
  • 在 C# 中安全,在 C++ 中不安全,简单返回指针/引用

    C 代码 person NewPerson void person p return p return pointer to person C code person NewPerson return new person return r