Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

WideString не пойму логику работы

11
13 ноября 2007 года
oxotnik333
2.9K / / 03.08.2007
BSTR allign, vAliign;
allign = WideString("left");
vAllign = WideString("bottom");

allign и vAliign имеют значение "bottom";

Как это понимать?
как правильно записать в них значения?
240
13 ноября 2007 года
aks
2.5K / / 14.07.2006
Скажи что делает WideString? )
Ну и плюс раз уж с указателями некорректно работаешь тут так юзай хоть обертки над ними ATL-ный типа CComBSTR. Они темболее все типы сами приводят где надо и можно повсеместно вместо BSTR применять.
11
13 ноября 2007 года
oxotnik333
2.9K / / 03.08.2007
хы...
и правда, че это я?
стормозил...
WideString allign, vAliign;
allign = "left";
vAllign = "bottom";
309
14 ноября 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
BSTR allign, vAliign;
allign = WideString("left");
vAllign = WideString("bottom");

allign и vAliign имеют значение "bottom";


Это объясняется очень просто. BSTR - это указатель на wchar_t. WideString - объект-контейнер для символьного массива в куче.
первый указатель инициализируется адресом, который записан во временном объекте - строка "left". После выполнения присваивания, объект WideString удаляется, но сама строка сама по себе не обнуляется.
При выполнении второй команды создание объекта WideString производится ещё раз. При этом, менеджер памяти выделяет тот же самый участок "кучи", что и в прошлый раз. При этом, "left" затирается массивом "bottom".
В результате, оба не связанных между собой указателя содержат один и тот же адрес свободного блока памяти, который ждёт, чтобы в него записали ещё чего-нибудь :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог