Полностью построенные объекты называют деструкторами.Частично построенные объекты этого не делают.
В вашем случае ваш Bat
объект частично создан, потому что вы выбросили исключение из его конструктора.Поэтому ~Bat()
будет не вызываться.
m_member_str
однако полностью построен, и поэтому будет вызываться его деструктор .Однако мы не можем увидеть тип этого объекта.
Если это std::string*
, то ничего не произойдет.Это указатель, и уничтожение указателя не удаляет память, на которую он указывает.
Если это некая форма интеллектуального указателя, то будет вызван его деструктор, и он будет безопасно обрабатывать выделенную вами память.
В общем, если ваши члены являются объектами RAII и имеют значимый деструктор, они будут очищаться независимо от того, что.
Если нет, как в этом случае, то выпридется разобраться с последствиями самостоятельно, возможно, bny поймает исключение, освободит память и затем сбросит.