Работа с памятью. Помогите, пожалуйста

Всем здравствуйте. Совершенно недавно начал программирование на С++. В данном ниже коде есть массивы answer_for_yes и answer_for_no. Меня очень смущает то, что они будут занимать память в коде до конца работы программы. Я пробовал new и delete, однако компилятор тогда воспринимает данные массивы как строки (что и логично, ведь это указатель на первый элемент, а не на массив), а не как массивы. А для данной функции in_array нужны лишь массивы. Может обратиться к malloc или calloc? Хотя скорее всего результат будет тот же. Помогите, пожалуйста.

#include <iostream>
#include <string>
#include <stdlib.h>

#include "Shotgun.h"
#include "Player.h"
#include "Item.h"
`
template<size_t N>
bool in_array(std::string(&array)[N], std::string str)
{
    for (auto& i : array) if (i == str) return true;
    return false;
}
`
int main()
{
    setlocale(LC_ALL, "RU");

    std::cout << "Are you ready (yes - y, no - n) : ";
    std::string* answer = new std::string;
    
    std::string answer_for_yes[] { "YES", "Yes", "yes", "y" };
    std::string answer_for_no[] { "NO", "No", "no", "n" };

    while (true)
    {
        std::cin >> *answer;

        if (in_array(answer_for_yes, *answer)) break;
        else if (in_array(answer_for_no, *answer)) exit(0);
        else std::cout << "Again: ";
    }

    delete answer;

    std::string* name1 = new std::string;
    std::string* name2 = new std::string;

// что-то ещё

    delete name1;
    delete name2;
    
    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Во-первых, при таких количествах беспокоиться о перерасхода памяти просто бессмысленно.

Во-вторых, все можно, но все имеет своим плюсы и минусы. Например, можно написать

std::string *answer_for_yes = new std::string[4]{ "YES", "Yes", "yes", "y" };
std::string *answer_for_no = new std::string[4] { "NO", "No", "no", "n" };

только вот теперь надо бы дописать освобождение памяти (a la delete[]answer_for_yes), да и ваша функция in_array при этом работать не будет, надо будет передавать в нее std::string *array и size_t N...

Тогда уж проще использовать

std::vector<std::string> answer_for_yes{ "YES", "Yes", "yes", "y" };
std::vector<std::string> answer_for_no{ "NO", "No", "no", "n" };

и соответственно переписать in_array, как

bool in_array(const std::vector<std::string>&array, const std::string& str)

или воспользоваться алгоритмом стандартной библиотеки типа find.

→ Ссылка