c ++ dtor для освобождения памяти _bstr_t - PullRequest
0 голосов
/ 20 мая 2011

Простой вопрос, но я не уверен, что это делается в C ++.

Когда у меня есть класс, в котором есть член _bstr_t.Я хотел бы знать, освобождается ли член при удалении объекта:

class A {
    _bstr_t foo("Testing");
}

В классе A нет dtor.Так что по умолчанию dtor вызывает dtor у каждого члена класса A?

Особенно для _bstr_t, потому что он выделяет строку через SysAllocString.

Спасибо

1 Ответ

5 голосов
/ 20 мая 2011

Да, будет вызван деструктор _bstr_t - об этом позаботится компилятор.Даже при том, что у него нет определяемого пользователем деструктора, компилятор будет генерировать код, который уничтожает все полностью построенные подобъекты, вызывая их деструкторы.

Поскольку _bstr_t имеет нетривиальный деструктор, который заботится о вызове SysFreeString() этот деструктор будет вызван и освободит BSTR.

...