私は以前CやJavaで作業していましたが、私はC++を初めて使っています。次のコードでオブジェクト変数値のC++連続チェックは異なる結果をもたらしますか?
、I:
- ポリゴンクラスを定義します。今のところそれだけで1つの変数があります。numpoints
- は、オブジェクトが存在する場合は、ちょうどnumpointsの値を出力しますクリックイベントのハンドラを定義
- ヌルだポリゴンオブジェクトへのグローバルポインタを作成します。そうでない場合は、それが最初のクリックした後、0
//defining polygon class
class polygon{
public:
int numpoints;
};
//create a global pointer that's uninitialized
static polygon *current = NULL;
//define a click handler.
void leftClick(int x, int y){
if (current==NULL){
polygon newpoly;
current = &newpoly;
current->numpoints = 0;
printf("created new polygon\n");
printf("%i points\n", (*current).numpoints);
}else{
printf("polygon exists\n");
printf("%i points\n", (*current).numpoints);
}
}
するnumpointsの値を、それを作成して設定し、プログラムが
予想通りcreated new polygon
0 points
を印刷します。しかし、2回目以降のクリック後には、
polygon exists
-1567658064 points
または他の一見乱数が印刷されます。誰がここで何が起こっているのか知っていますか?なぜ値が0にとどまっていないのですか?どんな助けもありがとうございます。
これは非常に悪いアドバイスです。浮動小数点ポインタと非管理ポインタを作成することは正しい解決策ではありません。 –
これは理想的ではないが、実用的な解決策です。 – Telokis
初心者に助言を与える際には注意が必要です。あなたは、単に働くものを手に入れるのではなく、良いアドバイスをすることを目標にすべきです。少なくとも、これはこれとそれに起因する悪い解決策であると言えば、良い解決策はそうです。場合は、良い解決策を言及したい場合は、クラスでこれをラップし、削除の世話をするデストラクタを取得するか、クラス内のスマートポインタを使用することをお勧めします。 –