C ++删除动态数组的对象

时间:2016-01-07 21:15:54

标签: c++ arrays image dynamic bitmap

我使用Embarcadero的C ++ Builder进行编程。我创建了一个TImage数组:

TImage *Image[c] ; // c is 5 

after that I am creating dynamic Images on an BUTTON CLICK :

for (int i = 0; i < c; i++) 
    {

    Image[i] = new TImage(this); 
    Image[i]->Parent = BoardItem ; // BoardItem is an Item of an TabControl    
    Image[i]->Height = 20 ;        
    Image[i]->Width = 20 ;        
    Image[i]->Position->X = d ;   // d and e are defined in the public var's.
    Image[i]->Position->Y = e ;
    Image[i]->Bitmap = Icon->Bitmap ; // Icon is an Image on my Formular
}

它运行正常,但Icon-&gt; Bitmap来自数据库,它也正常工作。但是在第二个按钮上单击旧图像不会被删除。因此,每当我再次点击该按钮时,该程序将再创建5个图像,但旧图像仍在那里。

我现在的问题是,如何刷新旧图像?我应该删除旧图像创建然后新图像吗? (我尝试了这个(删除,Free(),删除[]数组,但我总是得到暴力ERROR) 或者我应该刷新旧图像,以防数据库中图像的位图有更新,以及如何?

2 个答案:

答案 0 :(得分:0)

你需要两件事:

  • 确保第一次将指针初始化为null:

    foreach(var prop in thisItem.GetType().GetProperties()) 
    {
           reportBody.AppendLine(string.Format("{0}:{1}" prop.Name, prop.Value));
    }
    
  • 加载新图像时删除旧图像:

    TImage* Image[c] = {};
    

请注意,在空指针上使用delete Image[i]; Image[i] = new TImage(this); 非常安全;它只是没有做任何事情。因此,第一组图像没有任何变化,每个后续的图像会自动清除旧的图像而不是泄漏。

答案 1 :(得分:-1)

@Ben Voigt在这里你得到了我的整个代码,希望你能理解它。每次我想点击按钮时都应该刷新旧图像。要做到这一点,我想删除那个旧箱子后的新箱子。

TImage *Image[20]= {} ;

for (int i = 0; i < c; i++) 
{
str = " Hallo "

Image[i] = new TImage(this);  
Image[i]->Parent = BoardItem ;  
Image[i]->Height = 20 ;  
Image[i]->Width = 20 ;   
Image[i]->Position->X = d ;  
Image[i]->Position->Y = e ; 
Image[i]->Bitmap = Icon->Bitmap ;  
Image[i]->StyleName = str ;     
Image[i]->OnClick = ImageClick ;
d = d + 20 ;   // the next Image should be x-Position +20

if (d == 367) {  // 367 is the Width of my Formular  
  d = 7 ;       // If it is 367 Position-x is 7 again und Position-y is +20 
  e = e + 20 ;   
 }
}