В качестве упражнения я реализую класс стека на C ++ 11.
Это соответствующий код:
template <class T>
class stack
{
private:
T * elements;
std::size_t capacity;
std::size_t count;
public:
explicit stack(std::size_t capacity) : capacity(capacity)
{
elements = new T[capacity];
};
~stack()
{
delete[] elements;
};
void push(const T & t)
{
if (capacity > count)
{
elements[count++] = t;
}
}
void push(T && t)
{
if (capacity > count)
{
elements[count++] = std::move(t);
}
}
};
Я использую класс следующим образом:
stack<std::string> stack_test(2);
stack_test.push("string1");
std::string string2 = "string2";
stack_test.push(string2);
Как и ожидалось, первый pu sh использует pu sh (T && t) , тогда как второй pu sh использует pu sh (const T & t) .
Должен ли я реализовать значение pu sh (т. е. требуется ли pu sh (T && t) для реализации)?
И я должен использовать std :: move () в этом?