var
  bmp1, bmp2 : TBitmap;
begin
  bmp1 := TBitmap.Create;
  bmp2 := TBitmap.Create;
  bmp1.LoadFromFile(...);
  bmp2 := bmp1;
  ...
end;var
  bmp1, bmp2 : TBitmap;
begin
  bmp1 := TBitmap.Create;
  //bmp2 := TBitmap.Create;//注意,此行注释掉了
  bmp1.LoadFromFile(...);
  bmp2 := bmp1;
  ...
end;请问各位,以上两种写法有什么区别?当然,还有更麻烦的问题。请过来人指点迷津!
我喜欢上了一位网友。
我们都成家了并且有了孩子,本来都是在游戏而已,可是我却喜欢上她了。
她是那种虽然不算漂亮但一颦一笑都风情万种的成熟女人。
呵呵,我现在感觉那些青春靓丽的小妹妹比她差远了。
已经连续两晚上失眠了,想见到她。
可是,如果她知道我真的动了感情,肯定不敢再见我了。只好装作对她不冷不热的样子,让她认为我只是在游戏,不会给她带来麻烦。各位,我不会离婚,也不会要求她离婚,我只是想对她说我真的喜欢她!可是那样岂不是太给我们男同胞丢脸了?
千言万语闷在心里,难受啊!帮忙啊各位!

解决方案 »

  1.   

    这个叫做重载吗,感觉这两个没有什么区别
    使用create后,系统会给bmp2分配一个地址,但同样的在赋值的那一句中,把指针又重新定位了至于感情问题,说出来好了,不会给我们男同胞丢脸
      

  2.   

    第一种叫内存泄露!!!!!
    bmp2 := TBitmap.Create;在内存中创建了TBitMap对象然后又
    bmp2 := bmp1;//bmp2指向了bmp1的对象。这样原来的对象就没法访问了。既丢失在内存中了
    第二中方法就不是这样了。
    创建Tbitmap后,bmp1指向它。bmp2:=bmp1然后bmp2也指向它
    就是这样拉。
    说的不对还挺包含
      

  3.   

    推荐用第二种写法,第一种写法有问题,创建的对象BMP2,丢失了浪费了资源
      

  4.   

    或者这样用
    var
      bmp1, bmp2 : TBitmap;
    begin
      bmp1 := TBitmap.Create;
      bmp2 := TBitmap.Create;
      bmp1.LoadFromFile(...);
      //bmp2 := bmp1;
        bmp2.Assign(bmp1);//第一种写法,最好这样用
      ...
    end;
      

  5.   

    To myboor(菜菜菜鸟):
    应该是运算符重载。
    正如你说的,“在赋值的那一句中,把指针又重新定位了”Delphi并没有实现TBitmap的运算符重载,如果想把bmp1真正赋值给bmp2,应该用bmp2.assign(bmp1)才行。
    可是,听说,assgin只是一种“浅度复制”,想听听高手的意见。同样,第二个问题也请给意见!
      

  6.   

    bmp2.Assign(bmp1);其实此时并没有真正复制,也是将BMP2指向bmp1。当bmp1或bmp2的位图发生变化前实现了真正复制
      

  7.   

    To madyak(无天):
    你好!下面这几句话不明白什么意思,指点一下好吗?以下摘自《efg's计算机实验室图象处理技术报告》
    “TBitmap.Assign相对于“浅度复制”(只复制指针)来说是一个“深度复制”(复制所有的数据)。事实上,根据相关的统计,当某一个“标志”性的事件发生的时候,也就是说当位图复制了一份独立的拷贝的时候,Assign就是一个浅度复制了。这种细微的地方很少被察觉。”
    原文:http://www.code-labs.com/article/articleinfo.php?id=366
    当某一个“标志”性的事件发生的时候---------????????????
    当位图复制了一份独立的拷贝的时候---------???????????
    麻烦你详细解释一下好吗?