Я получил некоторый код С++ с различными структурами, определенными следующим образом:
typedef struct _someStruct_ {
std::string someString;
std::vector<std::string> someVectorOfStrings;
int someOtherStuff;
~_someStruct_()
{
someString.clear();
someVectorOfStrings.clear();
}
} someStruct;
Является ли деструктор здесь полностью избыточным - если структура должна была быть разрушена деструктором по умолчанию, не будут ли разрушены никакие строки, векторы и т.д.?
Если бы я написал код, я бы не подумал о добавлении явного деструктора здесь - я бы просто позволил компилятору справиться с этим.
Как я понимаю, единственный раз, когда вам может понадобиться создать свой собственный деструктор в структуре, - если какой-либо из членов структур содержит указатели на данные, которые могут потребоваться очистка, или если какая-то дополнительная функциональность (например, для отладки, регистрация, когда структура удаляется).
Мне что-то не хватает - есть ли причина, по которой строки и векторы были явно очищены в деструкторе? Мое подозрение состоит в том, что человек, который послал мне это, действительно программист на C (ср. Typedef), который попытался превратить некоторый C-код в С++.