3

オブジェクトを削除するには、どちらを選びますか? 特にQTですが、他の練習も大歓迎です。これらの 2 つの選択肢は、私には同じように見えますね。

  1. 別のクラスにバインドし、破壊されると破壊します。

    SomeClass::SomeClass{
     socket_ = new QTcpSocket(this);
    }
    

また

  1. クラスのデストラクタで破棄

    SomeClass::SomeClass{
     socket_ = new QTcpSocket();
    }
    
    SomeClass::~SomeClass{
     delete socket_;
    }
    
4

3 に答える 3

8

ローマにいるときは、ローマ人がするようにしなさい。フレームワークが 1 つのメソッドを使用している場合 (たとえば、Qt が親子関係に依存している場合)、コードでこのメソッドを使用します。

もちろん、一般的な適切なメモリ管理プラクティスを忘れないでください。可能な場合は常にスタック上にオブジェクトを作成し、共有ポインターを使用するなどです。

于 2010-05-04T11:48:14.957 に答える
3

RAIIは、のデストラクタでそれを行うべきだと言っていますSomeClass。その哲学によれば、インスタンスはSomeClassインスタンスを所有するQTcpSocketため、前者は後者の存続期間を完全に管理する必要があります。どちらのアプローチも有効ですが、必要のない方を好むと思いますdelete this

于 2010-05-04T11:43:42.267 に答える
0

私にとっては、コードを書くための短い方法(1)を選択する方が良いと思いますが、Qtがそれを行う(ユーザー定義変数を破棄する)ため、ベストプラクティスを念頭に置いてください。

于 2010-05-04T11:55:29.213 に答える