- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在检查某人的代码时看到了这个:
template<typename Data>
class ConcurrentQueue {
private:
HANDLE dataPushEvent;
// More Private Members...
public:
ConcurrentQueue() {
dataPushEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
}
// Public Methods...
};
如您所见,此类中没有析构函数,dataPushEvent
未在此类中的任何位置显式释放。由于它是私有(private)成员,因此无法从外部访问它,所以我认为这可能会造成内存泄漏。
除非这个句柄不应该被释放。
我是 C++ 和 Windows 编程的新手。就我而言,HANDLE
是一个 void *
,和所有指针一样,当我们用完它时应该释放它的引用。
我说得对吗?
最佳答案
如果没有析构函数,那么是的,句柄泄露了。应该有一个析构函数调用 CloseHandle()
销毁事件。
作为旁注,该类还应删除 (C++11) 或使其不可访问 (C++03) 复制构造函数和复制赋值运算符,因为编译器生成的默认值没有意义——它们是可能复制排队的数据,但仍然引用相同的事件句柄,导致多个看似独立的队列无缘无故地共享一个事件。当您实现析构函数时,默认的拷贝实现会更糟,因为一旦一个拷贝被破坏,它将破坏所有其他拷贝仍在使用的事件句柄!
在 C++11 中,您可以实现移动构造函数和移动赋值运算符,但您必须调整析构函数以考虑句柄可能已移动到另一个对象的事实,以便它不调用 CloseHandle()
。
关于c++ - 是否应处置 CreateEvent 返回的 HANDLE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27784323/
我正在研究 IO 重定向程序,并成功地为它创建了 poc。该程序生成子进程并使用命名管道与其通信。只要管道上有数据,我就使用 Event 对象来获取事件。默认情况下,我将事件设置为信号状态,但我不是第
我正在开发一个自动化项目,我试图单击网站上的按钮。我已设法识别该元素,但当我尝试使用 document.createEvent 时,它告诉我该对象不支持它。有什么想法吗? function categ
我正在尝试在 Web 应用程序中模拟按键,它适用于嵌入式系统,但它使用 Webkit 派生浏览器。我在 Chrome 中测试了代码并得到了同样的错误。 我尝试使用来自 Yahoo 的示例中的代码片段,
我有一个场景,我有一些文本,应该是用户可选择的。问题是,它上面有一个 UI 覆盖层,默认情况下会阻止选择文本。保留叠加层并仍然能够选择文本的合乎逻辑的方法是使用合成事件(使用 document.cre
以下代码失败(在 javascript 控制台中,以及通过浏览器扩展注入(inject)脚本时) document.createEvent('TestEvent') Firebug 吐出: [Exce
这个问题在这里已经有了答案: Not able to create event on Calendar with this script (2 个答案) 关闭 7 个月前。 我一直在编写代码,以便在
我有来自 here 的以下脚本: function download(filename, text) { var pom = document.createElement('a');
我正在使用找到的自定义输入事件@ http://whattheheadsaid.com/projects/input-special-event. . 问题是我无法获取该事件的 key 代码。有什么想
我有一个 process-1 尝试使用以下方式打开事件: LPCWSTR a = L"ShellReadyEvent"; HANDLE hEvent = OpenEvent ( EVENT_ALL_A
我在检查某人的代码时看到了这个: template class ConcurrentQueue { private: HANDLE dataPushEvent;
我很好奇在 Quake 中使用 CreateEvent() 函数。 我们在 WinMain() 定义的 c 文件中有以下全局变量: static HANDLE tevent; 在 WinMain()
如果我使用 CreateEvent 打开一个事件: responseWaitEvent = CreateEvent(NULL, // no security TRUE,
本文整理了Java中facebook4j.internal.json.z_F4JInternalFactory.createEvent()方法的一些代码示例,展示了z_F4JInternalFacto
这个问题已经有答案了: How to merge date and time as a datetime in Google Apps Spreadsheet script? (1 个回答) 已关闭
我们正在尝试使用 Google 表单创建一个在线表单来接受预约请求。这个过程应该是这样的: 用户填写表格并提交他们的信息(有效) 一封电子邮件被发送到我们的 Gmail 以通知我们有新的传入请求(这有
我正在编写一个 ant-cheat Win32 加载程序,我需要在其中创建一个事件,等待它收到我存储它的另一个进程的信号 - 但它因 ERROR_INVALID_HANDLE 而失败。我正在创建一个未
如果我在 Visual Studio 2005 中编译以下函数,我会遇到几个编译错误: void search() { deviceEventHandle = CreateEvent(NULL
我的 Windows 服务使用 CreateEvent 创建了 2 个事件,用于与用户应用程序通信。该服务和用户应用程序未在同一用户帐户下运行。用户应用程序打开事件并将其设置为无错误地发出信号。但是该
我试图模拟被拒绝的值并得到这个错误。奇怪的是,这种构造在“成功”的情况下有效addUser.mockImplementation(value => jest.fn().mockResolvedValu
我正在寻找 Mac OS X 上最简单或最合适的方法来简单地“发出信号”或通知一个进程。来自 Windows 背景,这可以使用类似以下的方法来实现。 进程A: // create named even
我是一名优秀的程序员,十分优秀!