Это действительно утечка памяти.Это несколько второстепенно, так как ваши данные должны остаться в живых до конца программы в любом случае, и по завершении программы она будет очищена - но это вызовет ложные срабатывания на детекторах утечки памяти, поэтому часто это хорошая идеявсе равно правильно убирать;если вы позволите себе полагаться на очистку ОС, когда вам действительно потребуется диагностировать утечку памяти, вы обнаружите, что вам нужно разобраться с сотнями ложных срабатываний!Также будет очень трудно реорганизовать код, чтобы он стал частью более крупной системы, где он может запускаться и останавливаться несколько раз в одном и том же процессе.
Самый простой способ избежать этого - использовать vector
:
std::vector<string> DbSetting::getDbSettings() {
std::vector<string> settings(4);
settings[0] = "dbname";
settings[1] = "server";
settings[2] = "username";
settings[3] = "password";
return settings;
}
int main(int argc, char* argv[]) {
std::vector<string> dbSettings = DbSetting::getDbSettings();
//dbSettings is used to construct a db connection string
return 0;
}
vector
автоматически очистит память, используемую массивом строк внутри него, когда он будет уничтожен при возврате из main.Он также имеет ряд очень удобных функций, которых нет в необработанных массивах - например, он отслеживает размер массива и может автоматически изменять размер массива, если вы добавляете новые элементы, используя push_back
.