Нужно ли перераспределять BSTR по ссылке в вызывающей функции? - PullRequest
0 голосов
/ 10 июня 2011
BSTR newID_x = SysAllocString(L"newID");
BSTR newX_x = SysAllocString(L"newX");

functionA(&newID_x);

//Func A does some operation on newID_x, we have that value in newID_x now

functionA(&newX_x);
//After Func A is called for the second time, both newID_x and newX_x become the same
//i.e, both are pointing to same locations and hence values too

Мой вопрос заключается в том, является ли это правильным поведением для BSTR с, нужно ли сохранять newX_x в каком-то новом BSTR после вызова functionA в первый раз?

Или часть functionA ошибочна тем, что может ошибочно распределять / отменять распределение переданных BSTR с.

1 Ответ

0 голосов
/ 10 июня 2011

То, что вы описываете, это семантика параметра «in-out» - параметр инициализируется перед вызовом, затем во время вызова он изменяется, и изменение становится видимым для вызывающего.Это приемлемо, но иметь такой интерфейс не очень удобно.В этом случае вызываемый должен будет перераспределить BSTR, а затем передать право собственности вызывающему.

...