我有一个程序,我在屏幕上使用以下代码绘制一些图像。
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
值会去哪里? (它是自我毁灭还是我应该手动完成?)
我不确定我是否正在拾取抓取值或类似的东西,因为图像可能不会出现,但只是想检查这是否也是可能的原因。 (仍在检查图像内部绘图和其他功能的内部实现)
答案 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;