WideString не пойму логику работы
allign = WideString("left");
vAllign = WideString("bottom");
allign и vAliign имеют значение "bottom";
Как это понимать?
как правильно записать в них значения?
Ну и плюс раз уж с указателями некорректно работаешь тут так юзай хоть обертки над ними ATL-ный типа CComBSTR. Они темболее все типы сами приводят где надо и можно повсеместно вместо BSTR применять.
и правда, че это я?
стормозил...
WideString allign, vAliign;
allign = "left";
vAllign = "bottom";
Цитата:
BSTR allign, vAliign;
allign = WideString("left");
vAllign = WideString("bottom");
allign и vAliign имеют значение "bottom";
allign = WideString("left");
vAllign = WideString("bottom");
allign и vAliign имеют значение "bottom";
Это объясняется очень просто. BSTR - это указатель на wchar_t. WideString - объект-контейнер для символьного массива в куче.
первый указатель инициализируется адресом, который записан во временном объекте - строка "left". После выполнения присваивания, объект WideString удаляется, но сама строка сама по себе не обнуляется.
При выполнении второй команды создание объекта WideString производится ещё раз. При этом, менеджер памяти выделяет тот же самый участок "кучи", что и в прошлый раз. При этом, "left" затирается массивом "bottom".
В результате, оба не связанных между собой указателя содержат один и тот же адрес свободного блока памяти, который ждёт, чтобы в него записали ещё чего-нибудь :)