5

最初:

LPCTSTR asdfsdf = (LPCTSTR)(_bstr_t)v;
printf("%s\n", asdfsdf);

2番目:

printf("%s\n", (LPCTSTR)(_bstr_t)v);

それらは同じですが、最初の条件は読み取り不可能なコードを引き起こします

なぜ?

4

1 に答える 1

9

この_bstr_tクラスは、C++クラス内にBSTRをカプセル化します。あなたの最初の例では:

LPCTSTR asdfsdf = (LPCTSTR)(_bstr_t)v;

オブジェクトを作成し、そこから_bstr_t抽出しますがLPCTSTR、一時_bstr_tオブジェクトは破棄されます。指し示しasdfsdfたものはすべて割り当てが解除され、使用できなくなります。

2番目の例では

printf("%s\n", (LPCTSTR)(_bstr_t)v);

一時オブジェクトはが呼び出される_bstr_tまで破棄されないため、値printf()を使用しても問題はありません。LPCTSTR

于 2012-12-06T07:57:45.407 に答える