0
void F(A* a)
{
    delete a; 
};

F(new A());

削除演算子は割り当てられたメモリを解放しますか、それとも次のようにオブジェクトを作成して削除する必要があります:

F(A* a) {} 

A a = new A();
F(a);
delete a;
4

1 に答える 1

1

はい、メモリを解放しますが、代わりに C++11 より前のstd::shared_ptrboost:: shared_ptrなどのスマート ポインターを使用することをお勧めします。また、あなたの例では、解放されたポインターを NULL に設定して、ダングリングポインターエラーを回避するために二重の割り当て解除を回避することをお勧めします。

void F(A*& a)
{
    delete a; 
    a = NULL;
};

F(new A());スルーとして呼び出すことはできず、変数を保持するポインターへの参照を渡す必要があります。2番目のバリアントのように。それがポインターA* a = new A();であることを示すために、そこにスルーがあるはずです。a

于 2013-04-25T12:48:20.730 に答える