0

次のコードを使用して、画面にいくつかの画像を描画するプログラムがあります。

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

さて、私のメインプログラムでは、次の方法でイメージビューアーを使用しています-

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


キーを押すと、画像のパスを変更する必要があるため、次のようにします

私のアプリケーションは正常に動作していますが、画面に画像が表示されなくなり、その理由を突き止めようとしています。質問したいことの 1 つは、ポインターについてです。ポインター
に a を代入するnew ImageViewer(newImagePath)imgV、前のimgV値はどこに行くのでしょうか。(それは自己破壊ですか、それとも手動で行う必要がありますか?)

画像が表示されない可能性があるため、グラゲ値またはそのようなものを取得しているかどうかはわかりませんが、これが考えられる理由であるかどうかを確認したかっただけです。(画像内の描画およびその他の関数の内部実装をまだチェックしています)

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 に答える