C++,在堆上创建的对象与本地创建的对象 - 返回指针时

2023-12-20

这是来自的后续问题在 C# 中安全,在 C++ 中不安全,简单返回指针/引用, https://stackoverflow.com/questions/8456335/safe-in-c-sharp-not-in-c-simple-return-of-pointer-reference

Is this:

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

一样吗?

person* NewPerson(void)
{
  person* pp = new person;

  return pp; //return pointer to person.
}

我知道第一个是个坏主意,因为它将是一个野指针。 在第二种情况下,对象在堆上是否安全 - 就像在 c# 中一样 当最后一个引用消失时超出范围?


是的,第二种情况是安全的。

但调用者需要delete返回的指针。你可以改变它来使用boost::shared_ptr当不再使用时它将被销毁:

boost::shared_ptr<person> NewPerson()
{
    boost::shared_ptr<person> pp = boost::make_shared<person>();

    return pp;
}

如果是 C++11 那么你可以使用std::shared_ptr or std::unique_ptr.

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

C++,在堆上创建的对象与本地创建的对象 - 返回指针时 的相关文章

  • C++ 中的软(不是:弱)引用 - 这可能吗?有实施吗?

    在 C 中我正在使用boost shared ptr and boost weak ptr自动删除不再需要的对象 我知道这些与引用计数一起工作 在 Java 中 内存由垃圾收集器管理 它将内置对象引用视为strong WeakReferen
  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • 为什么基类必须有一个带有 0 个参数的构造函数?

    这不会编译 namespace Constructor0Args class Base public Base int x class Derived Base class Program static void Main string a
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 为什么 BOOST_FOREACH 不完全等同于手工编码的?

    From 增强文档 http www boost org doc libs 1 48 0 doc html foreach html foreach introduction what is literal boost foreach li
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • 立即音频输入和输出 Android

    在我的 Android 应用程序中 我想从智能手机的麦克风中获取一些音频并立即播放 就像麦克风一样 没有延迟 我目前正在考虑使用AudioRecord and AudioTrack课程 根据我读过的内容 但我不太确定如何继续 我查看了 St
  • devops REST API:无法使用 PATCH 方法更新工作项状态

    我正在使用 DevOps Rest api 来获取一些信息 POST 方法对我来说效果很好 我想更新我的工作项目的状态 为此 我需要使用 PATCH 方法 这不起作用 并且没有给出任何类型的错误 https learn microsoft
  • 在已 root 的 Android 设备上读取或写入 /data 中的文件 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试以编程方式读取 写入已 root 的手机上 data 目录中的文件 我先来外壳执行 su确保我的程序获得超级用户访问权限 效
  • 更改活动选项卡视口大小,如开发工具响应视图

    在 Chrome 扩展中 我想更改视口大小 例如 DevTools 响应式视图 我正在调查https developer chrome com extensions tabs type ZoomSettingsMode https deve
  • 删除mysql表中的所有记录[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试从表中删除所有记录 我的查
  • Django:测试页面是否已重定向到所需的网址

    在我的 Django 应用程序中 我有一个身份验证系统 因此 如果我不登录并尝试访问某些个人资料的个人信息 我会被重定向到登录页面 现在 我需要为此编写一个测试用例 我得到的浏览器响应是 GET myprofile data some id
  • 如何在 MySQL 数据库中存储 UTC ISO8601 日期?

    我有数千个以下格式的日期 2011 10 02T23 25 42Z 又名 UTC 格式的 ISO 8601 我应该使用什么 MySQL 数据类型在 MySQL 数据库中存储这样的 ISO8601 日期 例如 Datetime timesta
  • 如何在 Keycloak 中指定刷新令牌的生命周期

    Keycloak 刷新令牌的生命周期为 1800 秒 refresh expires in 1800 如何指定不同的过期时间 在 Keycloak 管理 UI 中 只能指定访问令牌的生命周期 正如评论中指出的 库巴西蒙诺夫斯基 https
  • 为什么要在mvvm中的viewmodel和view上实现一个接口

    我对 MVVM 模式还很陌生 所以请耐心等待 我见过 wpf mvvm prism 中的实现 其中所有视图都倾向于将 IView 作为最顶层的界面 然后 各个模块中的视图都有一个特定于视图的接口 如 IViewA IViewB 等 它们实现
  • 移动 CALayer(添加动画)

    好吧 我有一个 CALayerlayer我想用 CADisplaylink 移动它 喜欢 layer center CGPointMake layer center x 10 layer center y 10 但我不能用center or
  • 为任何方法创建 Func 或 Action(在 C# 中使用反射)

    我的应用程序根据设置动态加载 dll 来自数据库 文件 类和方法名称 为了方便 加速和减少反射的使用 我想要一个缓存 遵循以下想法 MethodInfo Invoke 没有什么表现性的 反射性能 创建委托 C 属性 https stacko
  • ASP.Net MVC:在现有项目上从“无身份验证”更改为“个人用户帐户”

    我正在学习有关 ASP Net MVC 的课程 并且达到了该课程依赖于标准 注册 和 登录 功能的程度 当您在创建项目时选择 个人用户帐户 时 Visual Studio 会自动构建这些功能 显然 较新版本的 Visual Studio 现
  • 如何在异步任务中实现此图像视图?

    我有一个 url 传递给一个活动 我试图全屏显示 url 中的图像 但是它会引发主网络线程异常 据我所知 我相信我必须将该方法放入异步任务中 但我似乎根本无法理解它 那么我该如何将此方法放入异步任务中呢 全屏图像视图 java public
  • PS1 环境变量在 mac 上不起作用

    我有一个脚本 不是我自己写的 它在我的命令提示符中显示 git 分支 svn 分支 有谁知道为什么这在 mac 上不起作用 它在linux下完美运行 From https github com xumingming dotfiles blo
  • Observable .catch 不是一个函数

    从 Unix 环境运行代码时 我遇到了这个非常烦人的错误 当我通过本地运行代码时 这工作正常ng serve 但是当我将代码部署到我的服务器时 此错误会停止所有程序执行 ERROR TypeError this http get catch
  • 如何防止logback/slf4j解析换行符

    我使用 logback 和 SLF4j 来登录我的应用程序 我有一个包含换行符的字符串 它是字符串值的一部分 但并不表示新行 当我打印字符串时 logback 会在新行中打印它 如何防止这种情况发生 Code String str geor
  • Cygwin/bash 别名中的空格?

    我正在尝试为 Cygwin bash shell 设置别名 以运行标准 Windows C Program Files 子目录中包含的程序 不幸的是 alias 命令确实不喜欢目录名称中的空格 而且我尝试过的任何方法似乎都不起作用 我正在尝
  • pymysql fetchall() 结果作为字典?

    有没有办法使用 pymysql 将 fetchall 的结果作为字典获取 PyMySQL 包括一个DictCursor 它做我认为你想要的 使用方法如下 import pymysql import pymysql cursors conne
  • 跨线程的 HTTPContext

    我需要为每个网络请求实例化一个单例对象 以便数据处理一次并在整个请求期间有效 我正在使用HttpContext Current Items在 HTTP 请求期间共享数据 一切都很好 直到我们需要单例对象实例跨多个线程 我想到的第一件事是将
  • C++,在堆上创建的对象与本地创建的对象 - 返回指针时

    这是来自的后续问题在 C 中安全 在 C 中不安全 简单返回指针 引用 https stackoverflow com questions 8456335 safe in c sharp not in c simple return of