显然(在Delphi 2009中)这不是(不再是?)的情况.有谁知道这发生的时间?或者我的代码开始时是完全错误的?
为了澄清,这是一个简化的例子:
type IMyIntf = interface; TSomeObject = class(TInterfacedobject,IMyIntf) protected constructor Create; overrIDe; // creates some sort of context destructor Destroy; overrIDe; // cleans up the context created in Create public class function GetMyIntf: IMyIntf; //a factory method,calling the constructor end;procedure TestIt;begin DoSomething; with (TSomeObject.GetMyIntf) do begin DoStuff; DoMoreStuff; end; // <- expected: TSomeObject gets destroyed because its ref.count is decreased to 0 DoSomethingElse;end; // <- this is where TSomeObject.Destroy actually gets called
每当有人开始使用旧的“带有邪恶”的论点时,这始终是我心中的一个例子,让我继续“是的,但……”.好像我错了……有人能证实吗?
解决方法 Pascal / Delphi中保留的单词仅用于轻松访问记录或对象/类的成员(即为了不提记录/对象/类的名称).它与C#有很大不同,与垃圾收集有关.自从记录诞生之日起,它就以Pascal语言存在,以简化代码调用许多数据成员(当时简称为“字段”).总而言之,与垃圾收集,内存释放或对象实例的破坏无关.在with头部构造的对象之前可能已经在单独的代码行中初始化,它们是相同的.
总结以上是内存溢出为你收集整理的Delphi:从什么时候接口引用不再在with-block结束时释放?全部内容,希望文章能够帮你解决Delphi:从什么时候接口引用不再在with-block结束时释放?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)