Open alexey-malov opened 7 years ago
BOOST_AUTO_TEST_CASE(testing_for_many_push_and_pop)
{
for (size_t i = 0; i < 100000; i++)
{
stringStack.Push("qwerty");
}
BOOST_CHECK(stringStack.IsEmpty() != true);
for (size_t i = 0; i < 100000; i++)
{
stringStack.Pop();
}
BOOST_CHECK(stringStack.IsEmpty() == true);
}
last_data = std::unique_ptr<StackElement>(new StackElement());
void CStringStack::push(const std::string & value)
{
if (last_data == NULL)
{
last_data = std::unique_ptr<StackElement>(new StackElement());
last_data->string = value;
last_data->ptr = NULL;
}
else
{
std::unique_ptr<StackElement> p(new StackElement());
p->ptr = std::move(last_data);
p->string = value; // если выброчится исключение, то стек окажется пустым
last_data = std::move(p);
}
}
p->ptr
, который после выхода из области видимости обнулится, удаляя за собой все данные (с возможным переполнением стека из-за рекурсии при деструкторах)void CStringStack::pop()
{
if (!isEmpty())
{
auto p = std::make_unique<StackElement>;
last_data = std::move(last_data->ptr);
}
else
{
throw std::exception("Stack is empty");
}
}
[x] Нарушены соглашения о стиле кодирования. Имена методов должны использовать UpperCamelCase, а полей класса - m_lowerCamelCase
[x] что за имя last_data. лучше назвать m_top