1

私はこのような機能を持っています:

bool Function (BSTR paramter1, BSTR parameter2)
{
    // My Code
}

私はこのように呼んでいます:

Function(SysAllocString(L"Example1"), SysAllocString(L"Example2"));

私の理解では、 で割り当てたものはSysAllocStringで解放する必要がありますSysFreeString

BSTRボンネットの下のtypedefのようですtypedef OLECHAR *BSTR;

これはポインターなので、追加する限り問題ないはずです

SysFreeString(parameter1);
SysFreeString(parameter2);

Functionにあり、s に名前を付けないでくださいBSTR

ここでの私の推論はすべて正しいのでしょうか?これらの 2 行を追加する限り、メモリ リークは発生しませんか? まだまだ学ぶことがたくさんあります。どうぞよろしくお願いいたします。

4

1 に答える 1

4

はい、あなたは正しいです。しかし、これは通常、ソフトウェアを設計する適切な方法ではありません。一般に、オブジェクトを解放する責任は、オブジェクトを割り当てたルーチン、または関連するルーチンになります。Functionすぐに解放する必要のないパラメーター、またはヒープに割り当てられるのではなくローカルで宣言されたパラメーターを使用して呼び出すことができるはずです。

于 2012-09-01T09:51:04.323 に答える