对象的共享所有权是否是糟糕设计的标志?
背景:在阅读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 operato…
使用带有自定义删除器的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("o…
是否可以防止 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++ RAII 不工作?
我刚刚开始使用 C++ 中的 RAII 并设置了一个小测试用例。 要么我的代码非常混乱,要么 RAII 不起作用! (我猜是前者)。 如果我运行: #include <e…
RAII 和未初始化的值
只是一个简单的问题: 如果我有一个简单的向量类: class Vector { public: float x float y float z } RAII 概念也适用于此吗? 即提供一个构造函数…