Правильный способ использовать std :: initializer_list в конструкторе классов - PullRequest
0 голосов
/ 13 апреля 2020

Я создаю класс, который должен эмулировать vector (как интерфейс publi c), и в настоящее время я строю конструктор, который принимает в качестве параметра список инициализатора:

template<class T>
class DynamicArray{
public:
    DynamicArray(std::initializer_list<T> l) : size(l.size()), capacity(l.size()), p(std::make_unique<T[]>(l.size())) {
        unsigned int i = 0;
        for(auto& el : l)
            p[i++] = el;
    }

private:
    std::unique_ptr<T[]> p;
    unsigned int size;
    unsigned int capacity;
};

Как вы можете видеть, на данный момент я присваиваю элементы своему массиву с помощью operator= .. это правильный путь или я должен использовать std::move или std::forward или что-то еще?

Кроме того, проверяя vector, например, я вижу, что он принимает std::initializer_list по значению, а не по константной ссылке ... почему?

...