0

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

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);

我的应用程序运行良好,但有时会停止在屏幕上显示图像,我一直在试图找出原因。我想问的一件事是关于指针
当我为指针分配 anew ImageViewer(newImagePath)imgV,前一个imgV值去哪里了?(它是自毁还是我应该手动做?)

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

4

2 回答 2

0

您必须安全地删除以前的对象。

在 keyPress 做这样的事情。

string newImagePath= "someNewImage.png";
ImageViewer *imgV_temp = new ImageViewer(newImagePath);
delete imgV;
imgV = imgV_temp;
于 2013-10-09T07:54:49.987 回答
0

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

imgV = new ImageViewer();

您分配该类的一个新实例ImageViewer并将其内存地址分配给imgV. 之前存储的内存地址imgV会丢失,并且永远不会被释放。

delete您必须在imgV为其分配新值之前显式调用

于 2013-01-31T18:48:20.960 回答