С++ dtor для освобождения памяти _bstr_t

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

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

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

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

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

Спасибо


person mathk    schedule 20.05.2011    source источник


Ответы (1)


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

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

person sharptooth    schedule 20.05.2011