zoukankan      html  css  js  c++  java
  • DELPHI中BUG修改备忘

    1.关于sizeof

    同样的代码
    var   LWindCode : array [0..15] of char;
    begin
       showmessage(inttostr( sizeof(LWindCode)));
    end;
    在Delphi7和Delphi2009下结果分别是16/32,为什么?


    这是因为widechar和AnsiChar的问题,2009默认的是WideChar了,而Delphi7是AnsiChar,导致String的长度也发生了变化!以后要注意了!

    2.关于Assigned
      Assigned只是判断当前值是否为空,而不判断当前指着的内存是不是被释放,因此释放的时候要这样写:
    if assigned(frm) then
    begin
       frm.close;
       frm:=nil;
    end;
    或者
    if assigned(frm) then
    begin
    frm.close;
    freeandnil(frm);
    end;

     3.关于assert(断言)

    用法:   Assert(表达式);
    如果为假, assert会产生一个EAssertionFailed异常,显示信息为:
       Assertion Failed (C:\src\unit1.pas, [size=+0]line 34)
    当你不想再使用这些检查时,可以使用 {$ASSERTIONS OFF} 或 {$C-} 编译指令.
    要想使Assert在整个项目中失效,   关闭Project Options | Compiler | Assertion 选项
    缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。
    用法总结与注意事项:
    1)在函数开始处检验传入参数的合法性
    2)每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败
    3)不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题。
    4)assert和后面的语句应空一行,以形成逻辑和视觉上的一致感
    5)有的地方,assert不能代替条件过滤 

    4.关于Owner和Parent的区别

    Parent属性是指构件的包容器,构件只能在此范围内显示和移动

    Owner属性是指构件的所有者,它负责构件的创建和释放。

  • 相关阅读:
    013.ES6 -对象字面量增强型写法
    012. ES6
    011. ES6 语法
    10. 9. Vue 计算属性的setter和getter 以及 计算属性的缓存讲解
    4. Spring MVC 数据响应方式
    3. SpringMVC 组件解析
    9. Vue 计算属性
    【洛谷 2984】给巧克力
    【洛谷 1821】捉迷藏 Hide and Seek
    【洛谷 1821】银牛派对Silver Cow Party
  • 原文地址:https://www.cnblogs.com/enli/p/1740084.html
Copyright © 2011-2022 走看看