问题标签 [raii]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
6483 浏览

c++ - Any RAII template in boost or C++0x

Is there any template available in boost for RAII. There are classes like scoped_ptr, shared_ptr which basically work on pointer. Can those classes be used for any other resources other than pointers. Is there any template which works with a general resources.

Take for example some resource which is acquired in the beginning of a scope and has to be somehow released at the end of scope. Both acquire and release take some steps. We could write a template which takes two(or maybe one object) functors which do this task. I havent thought it through how this can be achieved, i was just wondering are there any existing methods to do it

Edit: How about one in C++0x with support for lambda functions

0 投票
8 回答
757 浏览

c++ - 使用带有字符指针的 RAII

我看到很多围绕文件句柄的 RAII 示例类。

我试图将这些示例改编为字符指针,但没有运气。

我正在使用的库具有获取字符指针地址的函数(声明为 get_me_a_string(char **x))。这些函数为该字符指针分配内存,并将其留给库的最终用户在他们自己的代码中清理它。

所以,我有看起来像这样的代码......

听起来 RAII 是我上面提到的这个烂摊子的答案。有人可以提供一个简单的 C++ 类来包装 char* 而不是 FILE* 吗?

谢谢

0 投票
6 回答
750 浏览

c++ - 资源管理类中的单元测试私有方法 (C++)

我之前用另一个名字问过这个问题,但是因为我没有很好地解释它而将其删除。

假设我有一个管理文件的类。假设此类将文件视为具有特定文件格式,并包含对该文件执行操作的方法:

假设我希望能够对此类计算校验和的部分进行单元测试。对加载到文件中的类的部分进行单元测试是不切实际的,因为要测试getChecksum()方法的每个部分,我可能需要构建 40 或 50 个文件!

现在假设我想在类的其他地方重用校验和方法。我提取该方法,使其现在看起来像这样:

现在我想对该calculateChecksum()方法进行单元测试,因为它易于测试且复杂,我不关心单元测试getChecksum(),因为它简单且很难测试。但我不能calculateChecksum()直接测试,因为它是private.

有谁知道这个问题的解决方案?

0 投票
10 回答
114731 浏览

c++ - 资源获取即初始化 (RAII) 是什么意思?

资源获取即初始化 (RAII) 是什么意思?

0 投票
3 回答
1482 浏览

c++ - RAII 和 C++ STL

我有一个案例,我希望将资源列表存储在 std::vector 中。如我所见,我的选择如下:

  1. 给我的资源一个默认构造函数
  2. 将它们存储为堆对象(并将它们包装在共享指针中)

选项 1 可以构造无效资源,选项 2 迫使我使用堆。

我在这里错过任何选择吗?

0 投票
3 回答
1796 浏览

c++ - 当我们结合 RAII 和 GOTO 时会发生什么?

我想知道,纯粹出于好奇(因为没有人应该编写这样的代码!)关于RAII的行为如何与goto的使用相结合(可爱的想法不是它)。

在 Visual Studio 2005 中运行以下代码时,我得到以下输出。

然而我想象,猜测,希望'BOO!实际上不会出现,因为Ghost不应该被实例化(恕我直言,因为我不知道这段代码的实际预期行为)。

这是怎么回事?


我刚刚意识到,如果我为 Ghost 实例化一个显式构造函数,则代码不会编译......

啊,奥秘……

0 投票
4 回答
18118 浏览

c++ - C/C++ 宏/模板 blackmagic 生成唯一名称

宏很好。模板很好。几乎任何工作都很好。

例子是OpenGL;但该技术是特定于 C++ 的,不依赖于 OpenGL 知识。

精确的问题:

我想要一个表达式 E;我不必指定唯一名称;这样在定义 E 的地方调用构造函数,在块 E 结束的地方调用析构函数。

例如,考虑:

手动解决方案:

现在,我不仅为 glTranslate 提供了这个,而且还有许多其他 PushAttrib/PopAttrib 调用。我宁愿不必为每个 var 想出一个唯一的名称。是否有一些涉及宏模板的技巧......或者其他会自动创建一个变量的东西,该变量的构造函数在定义点被调用;并在块结束时调用析构函数?

谢谢!

0 投票
1 回答
96 浏览

c++ - 这是管理 COM 初始化的好方法吗?

我对任何涉及组件对象模型的东西都很陌生,我想知道这种管理对 CoInitalize/CoUninitalize 的调用的方法是否有意义:

COM.hpp:

COM.cpp:

然后任何需要 COM 的组件都会调用COM::Setup()并忘记它。

这有意义还是我违反了 COM 的任何“规则”?

0 投票
8 回答
7177 浏览

c++ - 我应该使用 C++ 中的哪个包装类来进行自动化资源管理?

我是 C++ 业余爱好者。我正在编写一些 Win32 API 代码,并且有很多句柄和奇怪的复合分配对象。所以我想知道 - 是否有一些包装类可以使资源管理更容易?

例如,当我想加载一些数据时,我打开一个文件CreateFile()并获得一个HANDLE. 当我完成它时,我应该调用CloseHandle()它。但是对于任何相当复杂的加载函数,都会有几十个可能的退出点,更不用说例外了。

因此,如果我可以将句柄包装在某种包装类中,该类会CloseHandle()在执行离开范围后自动调用,那就太好了。更好的是——它可以做一些引用计数,这样我就可以将它传入和传出其他函数,并且只有在最后一个引用离开范围时才会释放资源。

这个概念很简单——但标准库中有类似的东西吗?顺便说一句,我正在使用 Visual Studio 2008,我不想附加像 Boost 之类的第 3 方框架。

0 投票
2 回答
538 浏览

c++ - 资源获取是初始化“RAII”

在下面的例子中

我从一个站点获得了这个 RAII 示例,并提出了一些疑问。请帮忙。

  1. 在 x 的构造函数中,我们没有考虑“如果内存分配失败”的场景。
  2. 这里 Y 的析构函数是安全的,因为 y 构造函数没有分配任何内存。如果我们还需要在 y 构造函数中进行一些内存分配怎么办?