问题标签 [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.
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
c++ - 使用带有字符指针的 RAII
我看到很多围绕文件句柄的 RAII 示例类。
我试图将这些示例改编为字符指针,但没有运气。
我正在使用的库具有获取字符指针地址的函数(声明为 get_me_a_string(char **x))。这些函数为该字符指针分配内存,并将其留给库的最终用户在他们自己的代码中清理它。
所以,我有看起来像这样的代码......
听起来 RAII 是我上面提到的这个烂摊子的答案。有人可以提供一个简单的 C++ 类来包装 char* 而不是 FILE* 吗?
谢谢
c++ - 资源管理类中的单元测试私有方法 (C++)
我之前用另一个名字问过这个问题,但是因为我没有很好地解释它而将其删除。
假设我有一个管理文件的类。假设此类将文件视为具有特定文件格式,并包含对该文件执行操作的方法:
假设我希望能够对此类计算校验和的部分进行单元测试。对加载到文件中的类的部分进行单元测试是不切实际的,因为要测试getChecksum()
方法的每个部分,我可能需要构建 40 或 50 个文件!
现在假设我想在类的其他地方重用校验和方法。我提取该方法,使其现在看起来像这样:
现在我想对该calculateChecksum()
方法进行单元测试,因为它易于测试且复杂,我不关心单元测试getChecksum()
,因为它简单且很难测试。但我不能calculateChecksum()
直接测试,因为它是private
.
有谁知道这个问题的解决方案?
c++ - 资源获取即初始化 (RAII) 是什么意思?
资源获取即初始化 (RAII) 是什么意思?
c++ - RAII 和 C++ STL
我有一个案例,我希望将资源列表存储在 std::vector 中。如我所见,我的选择如下:
- 给我的资源一个默认构造函数
- 将它们存储为堆对象(并将它们包装在共享指针中)
选项 1 可以构造无效资源,选项 2 迫使我使用堆。
我在这里错过任何选择吗?
c++ - 当我们结合 RAII 和 GOTO 时会发生什么?
我想知道,纯粹出于好奇(因为没有人应该编写这样的代码!)关于RAII的行为如何与goto的使用相结合(可爱的想法不是它)。
在 Visual Studio 2005 中运行以下代码时,我得到以下输出。
然而我想象,猜测,希望'BOO!实际上不会出现,因为Ghost不应该被实例化(恕我直言,因为我不知道这段代码的实际预期行为)。
这是怎么回事?
我刚刚意识到,如果我为 Ghost 实例化一个显式构造函数,则代码不会编译......
啊,奥秘……
c++ - C/C++ 宏/模板 blackmagic 生成唯一名称
宏很好。模板很好。几乎任何工作都很好。
例子是OpenGL;但该技术是特定于 C++ 的,不依赖于 OpenGL 知识。
精确的问题:
我想要一个表达式 E;我不必指定唯一名称;这样在定义 E 的地方调用构造函数,在块 E 结束的地方调用析构函数。
例如,考虑:
手动解决方案:
现在,我不仅为 glTranslate 提供了这个,而且还有许多其他 PushAttrib/PopAttrib 调用。我宁愿不必为每个 var 想出一个唯一的名称。是否有一些涉及宏模板的技巧......或者其他会自动创建一个变量的东西,该变量的构造函数在定义点被调用;并在块结束时调用析构函数?
谢谢!
c++ - 这是管理 COM 初始化的好方法吗?
我对任何涉及组件对象模型的东西都很陌生,我想知道这种管理对 CoInitalize/CoUninitalize 的调用的方法是否有意义:
COM.hpp:
COM.cpp:
然后任何需要 COM 的组件都会调用COM::Setup()
并忘记它。
这有意义还是我违反了 COM 的任何“规则”?
c++ - 我应该使用 C++ 中的哪个包装类来进行自动化资源管理?
我是 C++ 业余爱好者。我正在编写一些 Win32 API 代码,并且有很多句柄和奇怪的复合分配对象。所以我想知道 - 是否有一些包装类可以使资源管理更容易?
例如,当我想加载一些数据时,我打开一个文件CreateFile()
并获得一个HANDLE
. 当我完成它时,我应该调用CloseHandle()
它。但是对于任何相当复杂的加载函数,都会有几十个可能的退出点,更不用说例外了。
因此,如果我可以将句柄包装在某种包装类中,该类会CloseHandle()
在执行离开范围后自动调用,那就太好了。更好的是——它可以做一些引用计数,这样我就可以将它传入和传出其他函数,并且只有在最后一个引用离开范围时才会释放资源。
这个概念很简单——但标准库中有类似的东西吗?顺便说一句,我正在使用 Visual Studio 2008,我不想附加像 Boost 之类的第 3 方框架。
c++ - 资源获取是初始化“RAII”
在下面的例子中
我从一个站点获得了这个 RAII 示例,并提出了一些疑问。请帮忙。
- 在 x 的构造函数中,我们没有考虑“如果内存分配失败”的场景。
- 这里 Y 的析构函数是安全的,因为 y 构造函数没有分配任何内存。如果我们还需要在 y 构造函数中进行一些内存分配怎么办?