为keyPress上的指针指定一个新值

时间:2013-01-31 18:44:21

标签: c++ algorithm pointers

我有一个程序,我在屏幕上使用以下代码绘制一些图像。

ImageViewer : Image {
public:
ImageViewer(string path){
}
void drawImage(){
Image::draw(widthHeight);
}
private:
Rectangle widthHeight;
}

现在,在我的主程序中,我以下列方式使用图像查看器 -

string imgP = "someImage.png";
ImageViewer *imgV = new ImageViewer(imgP);


在按键时,我必须改变图像路径,所以我做了类似的事情:
imgV = new ImageViewer(newImagePath);

我的应用程序工作正常,但有时停止在屏幕上显示图像,我一直试图找出原因。在我的脑海里,有一件事要问的是关于指针的问题 当我为new ImageViewer(newImagePath)指针分配imgV时,之前的imgV值会去哪里? (它是自我毁灭还是我应该手动完成?)

我不确定我是否正在拾取抓取值或类似的东西,因为图像可能不会出现,但只是想检查这是否也是可能的原因。 (仍在检查图像内部绘图和其他功能的内部实现)

2 个答案:

答案 0 :(得分:0)

C ++本身不是托管语言。每次你说

imgV = new ImageViewer();

您分配ImageViewer类的新实例,并将其内存地址分配给imgV。存储在imgV中的先前存储器地址将丢失,并且永远不会被释放。

在为delete分配新值

之前,您必须明确呼叫imgV

答案 1 :(得分:0)

您必须安全地删除上一个对象。

在keyPress做这样的事情。

string newImagePath= "someNewImage.png";
ImageViewer *imgV_temp = new ImageViewer(newImagePath);
delete imgV;
imgV = imgV_temp;