|
本帖最后由 leolee82 于 2023-4-26 00:38 编辑
C++中常用的确保资源释放的技术,通过析构函数恢复变量的值
通常用于临时改变状态,函数执行完后恢复状态。之前用的回调函数,新做了这个更轻的。
不知怎么回事之前代码不完整,已补充
- Option Explicit
- 'outscope恢复变量的值,仅适用于简单的值类型
- '复杂类型请用clsScopeGuard或clsNamedScopeGuard
- '使用方式:
- 'Dim sg As New clsValueScopeGuard
- 'sg.Create VarPtr(v), VarPtr(5&), 4
- Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
- Private m_pOriginal As Long
- Private m_nBytes As Long
- Private m_Buffer(16) As Byte
- Sub Create(ByVal pOriginal As Long, ByVal pFinal As Long, ByVal nBytes As Long)
- m_pOriginal = pOriginal
- m_nBytes = nBytes
-
- '保存pFinal的值
- CopyMemory VarPtr(m_Buffer(0)), pFinal, m_nBytes
- End Sub
- Private Sub Class_Terminate()
- '设置Original的值为pFinal
- CopyMemory m_pOriginal, VarPtr(m_Buffer(0)), m_nBytes
- End Sub
复制代码
|
|