对象的共享所有权是否是糟糕设计的标志?
背景:在阅读Dr. Stroustrup 的论文和常见问题解答,我注意到一些来自传奇 CS 科学家和程序员的强烈“意见”和很好的建议。其中之一是关于 C++0x 中的…
在 C# 中使用 RAII 安全吗?还有其他垃圾收集语言吗?
我正在制作一个 RAII 类,它接受 System.Windows.Form 控件并设置其光标。在析构函数中,它将光标设置回原来的位置。 但这是一个坏主意吗?我可以放心…
DuplicateHandle 的价格
我正在编写一个类库,它为 C API(即 Windows 注册表)提供方便的面向对象前端。然而,我很好奇处理 HREG 的最佳做法是什么,例如复制我的 key 类。 …
向句柄包装器添加功能
我有一个 C++ RAII 类,用于使用 boost::shared_ptr<> 管理 Win32 HANDLE看起来有点像这样: namespace detail { struct NoDelete { void operator()(…
使用带有自定义删除器的shared_ptr使HANDLE RAII兼容
我最近在 SO 上发布了有关 RAII 的一般问题。 但是,我的 HANDLE 示例仍然存在一些实现问题。 HANDLE 在 windows.h 中被类型定义为 void *。因此,正…
使非对象资源符合 RAII 标准
在我的代码中,我使用 windows.h 中的 HANDLE。它们的使用方式 HANDLE h; if (!openHandleToSomething(arg1, arg2, &h)) { throw std::exception("ope…
是否可以防止 RAII 样式的类被“匿名”实例化?
假设我有一个 RAII 风格的 C++ 类: class StateSaver { public: StateSaver(int i) { saveState(); } ~StateSaver() { restoreState(); } }; ...在我…
在逗号运算符的 LHS 中初始化匿名互斥锁持有类实例
假设我有这样的代码: #include "boost/thread/mutex.hpp" using boost::mutex; typedef mutex::scoped_lock lock; mutex mut1, mut2; void Func() { …
是否有可能杀死 C++ Windows XP 上的应用程序无需展开调用堆栈?
我的理解是,当您在 Windows XP 中通过任务管理器终止 C++ 应用程序时,该应用程序仍然“干净”地被破坏 - 即调用堆栈将展开并且所有相关的对象析构函…
在 C++ 中不使用括号类的原因可能是什么?
通常需要完成以下任务:更改某物的状态,执行操作,然后将状态更改回原始状态。 例如,在 Win32 GDI 中,需要更改背景颜色,然后进行一些绘图,然后将…
C++ RAII 不工作?
我刚刚开始使用 C++ 中的 RAII 并设置了一个小测试用例。 要么我的代码非常混乱,要么 RAII 不起作用! (我猜是前者)。 如果我运行: #include #inc…
RAII 和未初始化的值
只是一个简单的问题: 如果我有一个简单的向量类: class Vector { public: float x; float y; float z; }; RAII 概念也适用于此吗? 即提供一个构造…
理解术语和概念的含义 - RAII(资源获取即初始化)
C++ 开发人员能否给我们详细描述一下 RAII 是什么、为什么它很重要以及它是否与其他语言有任何相关性? 我确实知道一点。 我相信它代表“资源获取就是…