Delphi文档指出:
永远不要直接引发EInvalidPointer异常。EInvalidPointer由内存管理器在内部引发。
我正在编写一个自定义基类作为 的替代方案TInterfacedObject
,尽可能地遵循 RTL 实现,并通过示例查看TInterfacedObject
RTL 中的实现BeforeDestruction
为:
procedure TInterfacedObject.BeforeDestruction;
begin
if RefCount <> 0 then
Error(reInvalidPtr);
end;
Where通过 RTL 本地的各种单元范围方法提出Error(reInvalidPtr)
。EInvalidPointer
如果我正在编写自己的课程,我应该如何实现BeforeDestruction
?为什么不这样做?:
procedure TMyInterfacedObject.BeforeDestruction;
begin
if RefCount <> 0 then
raise EInvalidPointer.CreateRes(@SInvalidPointer) at ReturnAddress;
end;
InvalidPointer
中声明的全局异常对象有什么特别之处SysUtils
吗?如果这是一个坏主意,那么在这里简单地提出一个自定义异常是否明智?