4

私はクラスを持っています例えば

class test{

   public:
      somedatahere
      test();
     ~test();
   private:
       string mystring;

}

このクラスでは、コンストラクターが変数mystring内のファイルの内容を読み取ります。私の質問は次のとおりです。

クラスが破棄されるとmystringは解放されますか、それとも手動で解放する必要がありますか?どうすればmystringを解放できますか?

4

3 に答える 3

7

はオブジェクトの一部であるためmystring、オブジェクトが存在するとスコープ外になります。「手動で」解放する必要はありません。実際、解放することはできません。

これは、 (または)でmystring割り当てられたメモリへのポインタである場合は異なり、デストラクタから手動(または)で割り当てる必要があります。newnew[]deletedelete[]

于 2012-11-15T08:48:20.093 に答える
5

割り当てたものを解放するだけです。と一致し、。と一致newする必要があります。deletenew[]delete[]

どちらも行わない場合、行儀の良いクラスでは、もう一方を行う必要はありません。そして、はい、標準ライブラリは正常に動作します。

いいえ、何もする必要はありません。インスタンスstd::stringがそれ自体の後でクリーンアップされるようにします。(そしてもちろん、その例に従い、あなた自身のクラスが同じことをすることを確認してください)

于 2012-11-15T08:48:16.217 に答える
1

mystringコンストラクタが他の割り当てや奇妙なことをせずに直接に割り当てると仮定すると、はい、デストラクタによって適切に割り当てが解除されます。

于 2012-11-15T08:50:02.143 に答える