raii相关内容
Windows句柄有时很烦人,记住清理后(做GDI与创建的笔和画笔是一个很好的例子)。 RAII解决方案是伟大的,但是它真的是伟大的一个完整的(规则五)RAII类为每个不同类型的句柄?当然不是!最好的我可以看到一个完整的通用RAII类与其他类只是定义应该做什么时,应该清理手柄,以及其他句柄的特定方面。 例如,一个非常简单的模块类可以这样定义(只是一个例子): struct Modul
..
很多人都很熟悉Alexandrescus ScopeGuard先生的模板(现在是Loki的一部分)和这里提供的新版本ScopeGuard11: http://channel9.msdn.com/Shows/Going+Deep/C-and-Beyond-2012 -Andrei-Alexandrescu-Systematic-Error-Handling-in-C 源代码:
..
我以前从来没有真正使用互斥体,但我需要控制对受保护资源的访问。通过新的C ++ 11的东西,我煮了这个类: class CMutex { public: class Lockable { friend class CMutex; std :: atomic_flag flag; public: Lockable() { flag.clear(); } };
..
我使用libssh2创建一个C ++类来执行SSH命令。 libssh2 SSH会话的生命周期通过这些阶段: 初始化(获取本地资源) 握手/认证(在远程 主机) 断开连接(终止远程主机上的SSH会话) 免费(释放本地资源;如有必要,还执行步骤3) / li> 在步骤1之前,我们必须打开一个套接字,我们在步骤2中传递给libssh2。从那时起,需要传递套接字,因为libss
..
以前,我只是使用malloc处理这些类型的__out函数参数,但是我试图改变我的方式。 在管理原始输入的类中,GetRawInputDeviceInfo()原型如下: UINT GetRawInputDeviceInfo(HANDLE,UINT,LPVOID,PUINT ) LPVOID是指向包含所需信息的缓冲区的指针。 PUINT是指向包含由LPVOID指向的缓冲
..
我知道RAII是什么。 现在,我想了解一下 smart 的含义。 > term。 http://en.wikipedia.org/wiki/Acquisition 获取意味着获取某物。 因此,当我们说 资源获取是初始化 时,这是什么意思? 我只是在谈这个术语的含义,而不是一般的概念。 解决方案 之前(可能是斯科特·迈尔斯,我不记得了),RAII应该被称为“破坏是资
..
我有一个代表数据流的类,它基本上是 读取或写入文件,但首先数据被加密/解密,并且还有一个底层的编解码器对象来处理被访问的媒体。 我试图以RAII的方式写这个类,我想要一个干净,漂亮,可用的设计。 我困扰我的是,现在有很多工作在构造函数中完成。 在对象的I / O例程可以安全使用之前,首先编解码器需要初始化(这不是很苛刻),但是然后考虑一个密钥,并且加密和其他事情被初始化 - 这些需
..
我在我的代码中使用了很多boost :: scoped_ptr,它是伟大的,但我目前使用的软件,使用shared_ptr所有的地方,我想知道如果我错过了一些东西。 AFAIK a shared_ptr仅在不同线程访问相同数据时有用,并且您不知道线程将要完成的顺序(使用shared_ptr确保对象存在,直到最后一个线程完成它。) 是否有其他用例? 解决方案 线程在这里不相关。相关
..
我正在使用链接列表作为练习。 我在 Cracking The Coding Interview book没有LinkedList(manager)类,只是节点,你挂在你的main函数的头节点。 我查找了C ++实现,但大多数似乎是C风格比C ++,即不是面向对象。它们使用struct,没有类,并有一个静态方法删除列表,你需要明确记得调用。我想写一个明智的RAII(资源获取是初始化)风格
..
这是关于在某种类中包装异常处理逻辑。在编写c ++ 代码时,很多时候我们需要捕获许多类型/变体的异常,这取决于客户端抛出什么。这导致我们在catch()子句中编写类似类型的代码(很多次)。 在下面的示例中,我写了一个函数(),它可以以许多可能的形式抛出异常。 我想知道是否可以以类的形式编写/包装这样的逻辑,以便最终用户必须立即编写类似类型的代码。 它是否有意义或有任何意义? #
..
这是关于在某种类中包装异常处理逻辑。在编写c ++ 代码时,很多时候我们需要捕获许多类型/变体的异常,这取决于客户端抛出什么。这导致我们在catch()子句中编写类似类型的代码(很多次)。 在下面的示例中,我写了一个函数(),它可以以许多可能的形式抛出异常。 我想知道是否可以以类的形式编写/包装这样的逻辑,以便最终用户必须立即编写类似类型的代码。 它是否有意义或有任何意义? #
..
背景:阅读博士时Stroustrup的论文和常见问题,我注意到一些强大的“意见”和传奇CS科学家和程序员的伟大意见。其中一个是C ++ 0x中的 shared_ptr 。他开始解释 shared_ptr ,以及它如何表示指向对象的共享所有权。在最后一行,他说,我引用: / p> 。 shared_ptr 表示共享 所有权,但共享所有权不是 我的理想:如果一个对象 有一个明确的所有者和
..
资源获取正在初始化 (RAII)通常用于C ++来管理在其生命周期结束时需要某种方式的清理代码的资源的生命周期,从 delete ing new 指向发布文件句柄的指针。 如何快速,轻松地使用RAII来管理资源的生命周期从C风格的API获取? 在我的例子中,我想使用RAII从C风格的API自动执行清除函数,当持有C它释放的资源超出范围。我真的不需要额外的资源包装,我想在这里最小化使用R
..
我正在学习C ++中的RAII成语,以及如何使用智能指针。 在我看来,我遇到了两件事, 引用自 http://www.hackcraft。 net / raii / : ...如果已创建具有RAII语义的成员对象,构造函数已经完成,那么它的析构函数将被称为堆栈展开的一部分。因此,控制多个资源的对象可以通过使用成员RAII对象来完成它们的清理,即使它不是完全构建的。 但引用自
..
我使用C ++与OpenCV库,这是一个库图像处理,虽然这不相关的这个问题。目前我有一个设计决定。 OpenCV是一个C库,其数据结构(如CvMat)声明为结构体。要创建它们,你使用cvCreateMat等函数,并释放它们,你使用cvReleaseMat这样的函数。作为一个C ++程序员,我创建了一个特殊的 cv_scoped 类,当它超出范围时会自动调用cvReleaseMat(如 boo
..
我有一些代码需要线程安全和异常安全。下面的代码是我的问题的非常简化版本: #include #include std :: mutex mutex; int n = 0; class Counter { public: Counter(){ std :: lock_guard guard(mute
..
为控制拥有项目的会话的库提供了一个C API,将C API封装到RAII C ++类中的最佳设计是什么? 例如: HANDLE OpenSession(STRING sessionID); void CloseSession(HANDLE hSession); HANDLE OpenItem(HANDLE hSession,STRING itemID); void Clo
..
我刚刚开始使用C ++中的RAII并设置一个小测试用例。我的代码是非常困惑,或RAII不工作! (我猜是前者)。 如果我运行: #include #include class A { public: A(int i){i_ = i; std :: cout
..
相关主题 std :: unique_ptr,deleters和Win32 API 要使用Win32句柄作为RAII,以下行 std :: unique_ptr :: type,decltype(& CloseHandle)> ; m_mutex(CreateMutex(NULL,FALSE,NULL),& :
..
我想为OpenGL对象(纹理,帧缓冲区等)写一个简单的RAII包装。我注意到,所有 glGen * 和 glDelete * 函数共享相同的签名,所以我的第一次尝试是这样的: typedef void (__stdcall * GLGenFunction)(GLsizei,GLuint *); typedef void(__stdcall * GLDelFunction)(GLsize
..