微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!
raii专题提供raii的最新资讯内容,帮你更好的了解raii。
我是 C++ 新手,我有一个类保存了一些内存,类看起来像: <pre class="lang-cpp prettyprint-override"><code>class
我想知道从软件设计的角度来看,对于每个派生类都应该具有不同类型的<strong>多态</strong>数据成员的情
我正在制作一个 HTTP 服务器,我想将一个套接字客户端类传递给线程来处理请求。问题是在启动线程后
使用C ++编译时间RAII类型的行为 - | 我知道这听起来有些奇怪,但这就是我想要做的:假设我有一个函数void f(),并且我想为此方法添加跟踪。我想通过跟踪消息(例如\“ Entered function f \”和\“ Exited function f \”)来跟踪此函数的完整性和该函...
在RAII(Resource Acquisition Is Initialization)中,一个对象获取一块资源是自己初始化的过程,资源会作为对象的
我有一个(可笑的)简单程序,它使用 Clang(或 GCC)的 <code>__attribute__((cleanup))</code> 机制自动释放内存
我知道这是设计,你不能控制当一个对象被破坏时会发生什么.我也知道定义一些类方法作为终结者. 然而,C的RAII是Ruby的成语(资源在构造函数中初始化,在析构函数中关闭)?即使发生错误或异常,人们如何管理在对象内部使用的资源? 使用确保作品: f = File.open("testfile") begin # .. process rescue # .. handle error ensu
在我的工作中,我们最近完成了控制应用程序的系统架构,其最大延迟大约为一到两秒.它分布在通过IP LAN进行通信的小型ARM片上盒中. 我们最初预见到我们会使用C或C,因为它是一种经典的控制系统语言.在讨论了如何实现应用程序之后,我们现在意识到C具有相当有限的库,缺乏内省,并且具有可能减慢开发的一些其他属性.我的同事随后建议Java可能会胜任这项工作. 我真的害怕为控制应用程序运行GC的延迟,我也不
假设你有一个包含某种可调用对象集合的类foo. foo有一个成员函数run(),它遍历集合并调用每个函数对象. foo还有一个成员remove(…),它将从集合中删除一个可调用对象. 是否有一个惯用的,RAII风格的后卫,你可以放入foo.run()和foo.remove(…),以便通过调用foo.run()驱动删除  将被推迟到守卫的破坏者开火?它可以用标准库中的东西来完成吗?这个模式有名字吗?
想象一下,我有一份工作要做,可以通过三种不同的方式来完成:缓慢而痛苦,但却是安全的方式;鉴于你有资源1,适度痛苦的方式;以及一种快速简便的方法,它需要Resource1和Resource2.现在,这些资源是宝贵的,所以我将它们包装成RAII实现ResNHolders并写下这样的东西: void DoTheJob(Logger& log/*, some other params */) {
让我们说具有如下通用代码: y.hpp: #ifndef Y_HPP #define Y_HPP // LOTS OF FILES INCLUDED template <class T> class Y { public: T z; // LOTS OF STUFF HERE }; #endif 现在,我们希望能够在我们创建的类(比如X)中使用Y.但是,我们不希望X的用户必须包含Y
Objective-C可以在某种程度上与c和 can be called to each other混合使用.但Objective-C对象仍然或多或少地手动管理,并且语言中完全没有RAII习语.我想知道是否有可能用c智能指针管理Objective-C对象的生命周期.特别是现在boost scoped_ptr和shared_ptr都已添加到C 11标准中 But Objective-C object
我有一些代码来更新看起来像的数据库表 try { db.execute("BEGIN"); // Lots of DELETE and INSERT db.execute("COMMIT"); } catch (DBException&) { db.execute("ROLLBACK"); } 我想将事务逻辑包装在RAII类中,以便我可以写 { DBTran
在成员函数的范围内,我想暂时将一个成员变量设置为一个特定的值. 然后,当该函数返回时,我想将此成员变量重置为给定的已知值. 为了避免异常和多个返回,我已经用类似类的简单的RAII来完成.它定义在成员函数的范围内. void MyClass::MyMemberFunction() { struct SetBackToFalse { SetBackToFalse(bool* p
所以正如我所理解的那样,正确地实现RAII,如果我在哪里调用CreateFont,我将它包装在一个类中,在构造函数中的CreateFont和析构函数中的DeleteObject,所以当它超出范围时,它会被清除. 第一个问题是,不会结束ALOT的类吗?特别是由于类只有一个构造函数和析构函数. 第二个问题是,如果我在WndProc中调用CreateFont类,那么它将不断地超出范围.所以我应该做所有的
C类成员的生命周期是多少.例如,何时释放Foo对象的std :: fstream?进入析构函数或离开析构函数时?这是在C标准中定义的吗? struct Foo { std::fstream mystream; ~Foo() { // wait for thread writing to mystream } }; 在执行~Foo()的主体之后,在销毁
所以我有一个图书馆(不是我写的),不幸的是使用abort()来处理某些错误.在应用程序级别,这些错误是可恢复的,所以我想处理它们,而不是看到崩溃的用户.所以我最终写这样的代码: static jmp_buf abort_buffer; static void abort_handler(int) { longjmp(abort_buffer, 1); // perhaps siglongj
相关话题 std::unique_ptr, deleters and the Win32 API 要使用Win32句柄作为RAII,我可以使用以下行 std::unique_ptr<std::remove_pointer<HANDLE>::type, decltype(&CloseHandle)> m_mutex(CreateMutex(NULL, FALSE, NULL), &::CloseHa
在析构函数中检测到它是一个很好的方法,它是在抛出堆栈时运行的,因为异常被抛出,而不是触发析构函数的范围的正常退出.我想知道,所以我可以创建一个有一些清理代码的类,它始终在正常退出时运行,但是在发生异常时跳过. std :: uncaught_exception()(在< exception>中定义)会在你的析构函数中告诉你,如果它被调用是因为一个异常: class A { public:
我最近在 SO发布了关于RAII的一般问题. 但是,我的HANDLE示例仍然有一些实现问题. 在Windows.h中,一个HANDLE被打破为void *.因此,需要正确的shared_ptr定义 std::tr1::shared_ptr<void> myHandle (INVALID_HANDLE_VALUE, CloseHandle); 示例1 CreateToolhelp32Snapshot