1

私は現在、一般的にすでに機能しているc++のいくつかの単純なカスタムアロケータに取り組んでいます。また、new / delete演算子をオーバーロードして、自分のアロケータからメモリを割り当てました。とにかく、私はメモリがどこから来ているのか本当にわからないいくつかのシナリオに出くわしました:

    void myFunc(){
          myObj testObj();
          ....do something with it
    }

この場合、testObjは関数内でのみ有効ですが、そのメモリはどこから取得されますか?とにかくそれを私のアロケーターにリンクすることはできますか?newとdeleteを使用してオブジェクトを作成する必要がありますか、それとも別の方法がありますか?

ありがとう

4

1 に答える 1

4

(を返すmyObj testObj();という名前の関数を宣言します。代わりに使用してください。)testObjmyObjmyObj testObj;

メモリはスタックから取得されます。autoスコープを離れると、マティック的に破壊されます。


あなたnewdeleteあなたを使用するには、もちろん電話newしてdelete

myObj* p_testObj = new myObj;
...
delete p_testObj;

ただし、スタックへの割り当ては1つの命令しか含まないため、最も効率的sub esp, ??です。myObj巨大でない限り、カスタム割り当てを使用する理由はわかりません。

于 2010-04-04T20:18:15.103 に答える