0

Qt-creator の C++ プロジェクトには、クラス App で使用するいくつかの設定を格納するクラス Settings があります (App は Settings を操作でき、App の削除後にこの更新されたデータが必要です)。最初に、各クラスのポインターを定義し、それを宣言して、Settings を App に渡しました。

settings.h:

class Settings {
public:
  Settings();
// ...
}

app.h:

class App {
public:
  App(Settings *set);
private:
  Settings *s;
// ...
}

app.cpp:

App::App(Settings *set){
s = set;
// manipulate s...
}

main.h

Settings* s;
App* a;

main.cpp

// ...
s = new Settings;
a = new App(s);

// ...
if(!aIsNeeded)
 delete a;
// from here, s is deleted too

同じ設定でアプリが再び必要になるまで、それはうまくいきます。= new App(s); を呼び出すと、s も削除されているように見えるため、例外があります。

これに対するより良いアプローチはありますか?なぜ削除されたのですか?

答えてくれてありがとう!

編集: 問題は、QWidget としての設定がアプリの ui に追加されたため、アプリの子になったことです。abeforeのデストラクタに次の行を追加して解決しましたdelete ui;:

s->setParent(0);

すべてのヒントをありがとう!

4

2 に答える 2

0

どうやら、メンバーはのデストラクタで解放されます。aその場合、の所有権を定義するのはあなた次第ですSettings。の外部で作成されているのでApp、所有権はに属していないと思いますAppので、App削除しないでください。

もちろん、スマートポイントを使用すれば、この問題は発生しません。

于 2012-09-01T16:30:16.543 に答える
0

これはデフォルトでは発生しません。Appそのポインタを削除しているデストラクタがあるようです。

于 2012-09-01T16:28:11.597 に答える