2

インスタンス作成時のメモリ割り当てについて教えてください

class simpleTestFactory
{
    public: 
    static simpleTest* Create()
    {
        return new simpleTest();
    }
}

class simpleTest
{
    private:
    int x,y,z;
    public:
    int printTest()
    {
        cout<<"\n This test program";
    }
}

int main()
{

    simpleTest* s1=simpleTestFactory::Create();
    .
    .   
    s1=simpleTestFactory::Create();
}   

メイン関数では、create static 関数を使用して simpleTest のインスタンスを作成しています。ここでも、同じオブジェクトに対して別のインスタンスを作成しています。

この場合、最初に作成されたインスタンス メモリは削除されますか??

そうでなければ、メモリの問題を回避する方法は??

4

4 に答える 4

2

この場合、最初に作成されたインスタンス メモリは削除されますか?

いいえ、そうはなりません。を呼び出すdeleteか、最初にスマートポインターを使用して、自分で割り当てを解除する必要があります。

(それ以外の場合、コードは有効な C++ ではありませs1simpleTest*simpleTest

于 2012-05-02T10:54:57.897 に答える
2

まず、オブジェクトへのポインターを渡すため、プログラムはコンパイルされません。そのはず:

simpleTest *s1 = simpleTestFactory::Create();
           ^^^

メモリ管理は、C++ で手動で行う必要があります。

delete s1;  // do it before new allocation to s1.

また、C++ ではオブジェクトの作成newは必須ではないことも覚えておいてください。次のように簡単にできます。

simpleTest obj;  // automatic object, no explicit deallocation

[自動ガベージ コレクションには、スマート ポインターも使用できます]。

于 2012-05-02T10:56:00.483 に答える
2

シングルトン型のパターンを試してください。インスタンスがまだ作成されていない場合にのみ作成できます。ユースケースがわからない。

于 2012-05-02T11:17:18.960 に答える
0

シングルトン パターンも、オブジェクト インスタンスが削除されることを前提としています。したがって、特別なメソッドを実装する必要があります。

Thangaraj の質問を考えると、';' を忘れないでください。クラス定義の後。はい、delete 呼び出しでオブジェクトを明示的に削除する必要があります。これを回避するには、スマート ポインターを使用できます。

于 2012-05-02T12:21:30.543 に答える