raii相关内容

是否可以在不同的类中编写/包装异常处理组件(try,catch)?

这是关于将异常处理逻辑包装在某种类中。在编写c ++ 代码时,很多时候我们需要根据客户端抛出的异常捕获许多类型/异常类型。这导致我们在catch()子句中多次编写类似类型的代码。 在下面的示例示例中,我编写了function(),该函数可以多种可能的形式引发异常。 我想知道是否有可能以类的形式编写/包装这种逻辑,以便最终用户不得不一次编写类似类型的代码? 这有意义还是有意义? ..
发布时间:2020-06-10 23:21:33 C/C++开发

Poco AsyncChannel不会在派生进程退出时退出

问题: 使用加载程序(第三方C程序,我们的代码在c ++中)从C库内部调用/初始化Poco代码. 程序加载我们的库,我们的lib初始化Poco :: Logger并在记录器中使用AsyncChannel + FileChannel. 此过程中的叉子. 在子进程中运行一些线程. 尝试退出子进程,加入线程. AsyncChannel的析构函数在close()上阻塞,实质上是轮询Qu ..
发布时间:2020-05-28 21:00:01 C/C++开发

PHP是否支持RAII模式?如何?

PHP上的大多数资源从不涉及内存管理,因为该语言本身非常擅长为您完成此任务.但是,在PHP中,您通常最终会处理不是内存的外部资源-数据库句柄,会话,数据库事务等.使用某种形式的RAII对象,可以最干净地管理这些外部资源. 我最初以为PHP使用了类似于JVM或CLR的垃圾回收方案,其中不存在析构函数的概念. (请记住:每个人都以错误的方式考虑垃圾收集-终结器不是析构函数!)有一种特殊的__de ..
发布时间:2020-05-27 03:00:09 PHP

为什么C ++中的Destructor以与初始化相反的顺序取消分配内存?

以相反的顺序将内存分配给变量有什么好处? 解决方案 请考虑以下示例: Type1 Object1; Type2 Object2(Object1); 假设Object2使用Object1的一些内部资源,并且只要Object1有效,该资​​源就有效.例如,Object2的析构函数访问Object1的内部资源.如果不是为了保证销毁的反向顺序,那将导致问题. ..
发布时间:2020-05-08 21:56:38 C/C++开发

使用c ++ std :: unique_ptr<>管理Objective-C对象或std :: shared_ptr<>

Objective-C可以在某种程度上与c ++混合使用,并且可以相互调用.但是,Objective-C对象仍然或多或少是手动管理的,该语言完全没有RAII习惯用法.我想知道是否有可能使用c ++智能指针来管理Objective-C对象的生存期.特别是现在,升压scoped_ptr和shared_ptr都已添加到C ++ 11标准 解决方案 但是,Objective-C对象仍然或多或少 ..
发布时间:2020-05-08 21:52:40 移动开发

Java是否支持RAII /确定性破坏?

自从我使用Java以来​​已经至少5年了,当时,只要你想分配一个需要清理的对象(例如套接字,数据库句柄),你就必须记得添加一个 finally 阻止并在那里调用清理方法。 相比之下,在C ++(或其他语言中,对象生存期是确定性的,例如Perl),类实现者将定义一个析构函数,只要该类的对象超出范围,该函数就会执行清理。这种方法的优点是对象的用户不会忘记清理它 - 即使抛出异常,也会自动调用析构 ..
发布时间:2018-12-05 09:42:19 Java开发

是否可能在不同的类中编写/包装异常处理组件(try,catch)?

这是关于将异常处理逻辑包装在某种类中。在编写c ++ 代码的时候,很多时候我们需要捕获许多异常的类型/变种,这取决于客户端抛出什么。这导致我们在catch()子句中编写类似类型的代码(很多次)。 在下面的示例示例中,我已经编写了函数(),它可以以许多可能的形式抛出异常。 我想知道是否可以以类的形式写入/包装这些逻辑,以便最终用户必须在一次写入类似的代码类型。 是否有意义或有任何意义? ..
发布时间:2017-10-01 16:04:40 C/C++开发

当构造函数引发异常时,RAII如何工作?

我正在学习C ++中的RAII成语,以及如何使用智能指针。 在我的阅读中,我遇到了两件事,对我来说,似乎相互矛盾。 引自 http:/ /www.hackcraft.net/raii/ : ...如果已经创建了具有RAII语义的成员对象,在构造函数完成之前发生异常,那么它的析构函数将被调用作为堆栈展开的一部分。因此,控制多个资源的对象即使没有使用成员RAII对象完全构造,也可以对 ..
发布时间:2017-09-29 12:12:12 C/C++开发

native(C ++)异常传播到CLR组件时不调用的析构函数

然后我们有几个包含C ++ / CLI代理代码的dll,用来包装C ++接口。 除此之外,我们将C#代码调用到C ++ / CLI包装器中。 到目前为止。 但是我们有很多情况允许本机C ++异常传播到.Net世界,我们依靠.Net的能力将它们包装为系统.Exception对象大部分工作正常。 然而,我们已经发现,在throw的时候,范围内的对象的析构函数不会被调用例外传播! ..
发布时间:2017-09-29 11:43:43 C#/.NET

RAII与例外

我们在C ++中使用RAII越多,我们发现自己与非平凡的解除分配的析构函数越多。现在,释放(完成,但是你想称之为)可能会失败,在这种情况下,异常真的是让任何人在楼上知道我们的解除分配问题的唯一方法。但是,再次,抛出析构函数是一个坏主意,因为在堆栈展开期间抛出异常的可能性。 std :: uncaught_exception()可以让您知道何时发生,但不会有更多的事情,因此除非您在终止之前记录消息, ..
发布时间:2017-09-29 11:13:09 C/C++开发

C ++是否支持'finally'块? (这个我听到的“RAII”是什么?)

C ++是否支持“ 终于 '阻止? 什么是 RAII成语 ? C ++的RAII成语与 C#的'使用'语句 ? 解决方案 不,C ++不支持'finally'块。原因是C ++反而支持RAII:“资源获取正在初始化” - 一个恶劣的名字 † 是一个非常有用的概念。 想法是,对象的析构函数负责释放资源。当对象具有自动存储持续时间时,当创建对象的析构函数被创建时,它将被调用 ..
发布时间:2017-09-27 21:16:34 C/C++开发

什么时候适合使用C ++异常?

我试图设计一个需要动态分配一些内存的类。 我已经计划在构建过程中分配它需要的内存,但是如何我处理失败的内存分配?我应该抛出异常吗?我读到某个地方,例外应该仅用于“特殊”的情况,而且内存不足似乎不是特例。 我应该分配记住在一个单独的初始化程序中,检查失败,然后优雅地破坏类实例? 还是应该使用异常?如果这些内存分配失败,该类别将无法做到这一点。 编辑:这是一个例外情况。 ..
发布时间:2017-08-28 02:05:49 C/C++开发

Java中的RAII ...资源处理总是如此丑陋?

我刚刚玩过Java文件系统API,并且下载了以下功能,用于复制二进制文件。原始来源来自Web,但是我添加了try / catch / finally子句,以确保在出现错误的情况下,缓冲区流将被关闭(因此,我的操作系统资源被释放),然后退出该函数。 > 我修剪了函数以显示模式: public static void copyFile (FileOutputStream oDStream ..
发布时间:2017-05-14 09:30:01 Java开发

CUDA:在C ++中包装设备内存分配

我现在开始使用CUDA,不得不承认我对C API有点失望。我理解选择C的原因,但是语言是基于C ++,而是几个方面会更简单。设备内存分配(通过 cudaMalloc )。 我的计划是使用重载的 new 和RAII(两个备选)的新的 operator new 。我想知道是否有任何警告,我还没有注意到目前为止。代码似乎可以工作,但我仍然想知道潜在的内存泄漏。 RAII 代码如下: ..
发布时间:2017-03-04 14:17:13 C/C++开发