2017-10-22 13 views
0

私はグラフィックオブジェクトmylineを持っています。彼はクラスMyLineItemから裸であり、QGraphicsLineItemからサブクラス化されています。qtの初期化されていないオブジェクトをチェックする方法

最初の初期化の前に、mylineが初期化されているかどうかを確認する必要があります。 (そうでなければ...何かを行う - それを初期化する)。しかし、何も私を形作ってくれません。あなたはどこに問題があるか知っていますか?私は2つのコンストラクタ持っHファイルで

:私のメインプログラムで

explicit MyLineItem(QGraphicsLineItem *parent = 0); 
MyLineItem(const QLineF &line, QGraphicsItem *parent = 0) 

は次のようなものです:

MyLineItem *myline; 

if (myline != 0) 
{ 
    QLineF newLine = QLineF(myline->line().p1(), mouseEvent->scenePos()); 
    myline->setLine(newLine); 
    update(); 
} 
else 
{ 
    myline = new MyLineItem(QLineF(mouseEvent->scenePos(),mouseEvent->scenePos())); 
} 

問題は、まだのみ{}の場合に入るというプログラムです。しかし、初めて、コードの他の部分に入る必要があります。

私は同じものを試験した。 In partプログラムがクラッシュした場合。 Ofcourse ....なぜなら、オブジェクトのmylineは初期化されていないからです。

+0

*関数内のローカル変数ですか?それはクラスメンバ変数ですか?そして、それを定義するときに*初期化するのはなぜですか? –

+0

なぜ初期化しないのですか?:マウスが最初にクリックされた後に線が作成されるためです。 mylineは、プライベートメインクラス変数としてHファイルに定義されています。 – exo

+0

しかし、if(myline!= NULL)からif(myline == NULL)に変更すると、プログラムはまだif {}ブロックだけに移動するのはなぜ分かりませんか? – exo

答えて

0
  1. 現代のC++は、事実上特に管理ポインタQScopedPointer、QSharedPointerを提供してQtのフレームワークで、生のポインタの使用を取り除くことができます... とSTLライブラリすぎ

  2. あなたMyLineItemのような非初期化されたもの* mylineは簡単にキャッチすることができます。コンパイラはそれらを検出するためのオプションとして

  3. 少なくともビジュアルスタジオでは、初期化されていない変数またはポインタでデバッグモードとリリースモードが異なる結果になります。デバッグでは一般的にゼロになっていますが、リリースではそうではありません。なぜなら、デバッグではなくリリースでは機能しない理由を説明することがあります。

関連する問題