避免使用“抛出”构造函数进行堆分配

2024-01-08

说我有课Foo它没有定义默认构造函数并且throws在非默认构造函数中。初始化该类型的新对象时,我想捕获任何异常并返回,否则继续使用该对象。我注意到初始化这个对象(如果可能的话)很困难在堆栈上或通过使用共享指针,因为我试图避免管理内存。

Fail 1

Foo f; // doesn't work, no default constructor
try { f = Foo(...); }

Fail 2

try {
  Foo f(...)
}
catch(...) {}
// doesn't work, f is inaccessible

Fail 3

boost::shared_ptr<Foo> pf;
try { pf = new Foo(...); } // no assignment operator

我必须吗...

Foo *f;
try { f = new Foo(...) } // okay, let's just manage the memory

有办法吗?

Edit

好吧,这可行,尽管不是最干净的。有没有更“标准”的方式?

boost::shared_ptr<Foo> pf;
try { pf = boost::shared_ptr<Foo>(new Foo(...)); }

智能指针有一个reset method:

boost::shared_ptr<Foo> f;
//...
f.reset(new Foo(...));

这解决了您的“失败#3”并允许您做您想做的事。

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

避免使用“抛出”构造函数进行堆分配 的相关文章

  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 如何使用 ASP.NET Core 获取其他用户的声明

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

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • 在 C 中使用枚举而不是 #defines 作为编译时常量是否合理?

    在 C 工作了一段时间后 我将回到 C 开发领域 我已经意识到 在不必要的时候应该避免使用宏 以便让编译器在编译时为您做更多的工作 因此 对于常量值 在 C 中我将使用静态 const 变量或 C 11 枚举类来实现良好的作用域 在 C 中
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • 我应该如何检测大型 C++ 项目中的编译时间瓶颈?

    我想减少大型 C 项目的编译时间 我尝试使用预编译头 接口等 但在继续之前 我想知道是否有任何工具可以帮助检测编译时间为何如此长 有人建议使用 pc lint 我会尝试一下 我应该如何检测大型 C 项目中不必要的 include 文件 ht
  • Selenium 不加载重定向页面

    我有一个工具可以加载网站 填写信息并保存结果 直到上周 它都运行良好 经过调试 我发现原因是因为站点URL 变成 了重定向 重定向的顺序如下所示 例如 网站网址是google com google com google com someth
  • Mongoose 使用 $in 查找数组

    Team find id in teamIds function err teamData console log teams name teamData 这段代码给了我们未定义的返回值 但是在 var teamIds 中是这样的 5456
  • 在 HTML 中选择输入和文本输入 - 使宽度相等的最佳方法?

    我有一个像这样的简单表格 仅用于说明目的
  • 如何重构抛出异常的函数?

    假设我正在重构这样的函数 def check ox Option Int Unit ox match case None gt throw new Exception X is missing case Some x if x lt 0 g
  • 在多对多关系中使用 Doctrine QueryBuilder 进行 NOT IN 查询

    在我的 Symfony2 项目中 我有两个实体 联系人 和 设置 具有多对多关系 ORM ManyToMany targetEntity AppBundle Entity Settings cascade persist ORM JoinC
  • 使用流来解密和解压缩以限制内存使用?

    我有一个非常大的 zip 文件 2 5gb 它是加密的 我无法将整个文件解密到内存中并解压缩以进行生产 所以我尝试使用流来限制使用的内存量 我已经连接了以下内容来执行此操作 为了清楚起见 省略了错误处理和流关闭 SecretKeySpec
  • Win 2008 r2 x64 服务器是否已安装 .net 3 sp1 软件包?

    和标题一样吗 我有一个带有上述操作系统的测试服务器 我的应用程序基于 net 3 5 我确实想知道 win 2008 r2 是否附带 net 3 5 的 Service Pack 1 它是否附带 net 3 5 sp1 系列更新 因为我下载
  • 我无法在操作创建者文件中使用 useHistory 函数

    我正在使用react router dom和redux 我在调度后使用history push 但它显 示错误 我希望用户在成功身份验证后导航到 使用谷歌 export const googleLogin gt async dispatch
  • 地址上方首次使用的单元格

    我正在 Excel 中创建预算 因此我有一些类别和子类别 子类别与其各自的父类别相比有 1 个单元格 子类别当然可以有自己的子类别 在 类别树 旁边的列中 我想打印 类别路径 Let s say I have the following t
  • 如何使用node.js生成excel文件?

    您好 我正在从数组中生成 excel 文件 但我没有成功 我正在使用 node js 工作 并且使用 npm 包生成 excel 文件 但我没有在 excel 文件中获取任何数据 excel 已生成 但未在我的文件中获取任何类型的数据 所以
  • 当 RStudio 中的 ioslides 的 type=HTML 时,调整 stargarzer 表的大小

    我刚开始使用 R Markdown 在 RStudio 中创建幻灯片演示文稿 我无法在网上找到任何可以解决我的具体问题的内容 这是close https stackoverflow com questions 15385696 how to
  • v8 中 Node.js 和 chrome 之间的区别

    镀铬版本 49 0 2623 110 m 节点 v5 10 0 这是我的代码 var a 0 function this a 1 this b 2 console log a console log a console log b 铬给出
  • dplyr 和 tidyr:将长格式转换为宽格式并排列列

    我正在创建一个shiny app用户将在其中上传包含多个变量的 csv 文件 使用dplyr 我会select前四个变量 如下所示 并将它们从长格式转换 DATA df lt read table text c Customer Rate
  • 更改绘图悬停框 R 的位置

    我想更改悬停框的位置plotly条形图 我希望它在栏上方弹出 而不是在左侧或右侧弹出 这可能吗 我一直在谷歌上搜索这个并盯着 Plotly R 参考页面几个小时 但没有运气 这是一个示例 library dplyr library plot
  • 在Oracle中使用SQL从3个表中选择数据

    我希望有人可以提供帮助 我是very这一切都是新的 我被困住了 我有 3 个表 我试图从中提取数据 顾客 custid 第一个 最后一个 积分俱乐部编号 调查编号 订单日期 订单总数 员工 empid 名字 姓氏 工资 销售额 销售日期 c
  • 简单的 REST URL 方案

    在我的网络应用程序中 我有一个user模型和一个journal and post模型 每个用户可以有多个日记 每个日记可以有多个帖子 下面是以 RESTful 方式表示这一点的最佳方式吗 profiles
  • EntityFramework Core 1.1.0 缺少 Include()? [复制]

    这个问题在这里已经有答案了 我正在使用 EntityFramework Core 1 1 0 我可以查询表并加载实体 但 Microsoft 的说明表明如果我想加载关系数据 我应该使用 Include 功能 https learn micr
  • php cURL 问题

  • 避免使用“抛出”构造函数进行堆分配

    说我有课Foo它没有定义默认构造函数并且throws在非默认构造函数中 初始化该类型的新对象时 我想捕获任何异常并返回 否则继续使用该对象 我注意到初始化这个对象 如果可能的话 很困难在堆栈上或通过使用共享指针 因为我试图避免管理内存 Fa