【发布时间】:2010-12-25 13:16:57
【问题描述】:
我有以下问题:我有一个实体类“TEntity”和一个网格类“TMesh”,TEntity 需要知道它的元素(TMesh)何时被删除。有没有一种可能的工作方式我可以从 TMesh 析构函数中调用 TEntity 方法“OnMeshRemove”?
//uTEntity
interface
uses
uTMesh;
type
TEntity = class
Mesh : TMesh;
constructor Create(); overload;
procedure OnMeshRemove();
end;
implementation
constructor TEntity.Create();
begin
Mesh := TMesh.Create();
Mesh.EntityContainer := @self;
end;
procedure TEntity.OnMeshRemove();
begin
//Do stuff
end;
end.
//uTMesh
interface
type
TMesh = class
EntityContainer : Pointer;
destructor Remove();
end;
implementation
uses
uTEntity;
destructor TMesh.Remove();
var
PEntity : ^TEntity;
begin
PEntity := EntityContainer;
if Assigned( PEntity^ ) then
begin
PEntity^.OnMeshRemove();
end;
inherited Destroy();
end;
例子:
var
Ent : TEntity;
begin
Ent := TEntity.Create();
Ent.Mesh.Remove();
//I want Ent.OnMeshRemove to be called. In my example code, there is a pointer problem. I need to solve that. Thanks!
end;
PS:我不想拥有像 TEntity.RemoveMesh(); 这样的 TEntity 程序;
【问题讨论】:
-
很难知道您在此处尝试什么,但在 Delphi 中,所有析构函数都称为 Destroy,它们从不直接调用 - 您改为调用 Free。
-
如果这是您的要求,您可以将指针类型转换为实际类型
TEntity(EntityContainer).OnMeshRemove();.. -
@Sertac Akyuz 仅在 EntityContainer := @self 更改为 EntityContainer := Pointer(self) 时才有效
-
为什么,调用 virtual Destroy 而不是 static Free 是完全合法的
-
@user205376 在您调用 free 的析构函数中,因为该对象可能尚未创建并且未分配自我的免费测试
标签: delphi class pointers methods