Reywam / OOP

0 stars 0 forks source link

Замечания по CMyStack #4

Open alexey-malov opened 7 years ago

alexey-malov commented 7 years ago
2>  test.cpp
2>c:\teaching\2016\new\lelekov\oop\lab7\cmystack\test\test.cpp(102): warning C4267: 'argument': conversion from 'size_t' to 'const int', possible loss of data
2>c:\teaching\2016\new\lelekov\oop\lab7\cmystack\test\test.cpp(121): warning C4267: 'argument': conversion from 'size_t' to 'const int', possible loss of data
2>  main.cpp
alexey-malov commented 7 years ago
        std::shared_ptr<Node> newElement(new Node);
alexey-malov commented 7 years ago
    void Copy(std::shared_ptr<Node> lastElement)
    {
        if (lastElement != nullptr)
        {
            Copy(lastElement->prevElement);
            Push(lastElement->element);
        }
    }

    void Move(std::shared_ptr<Node> lastElement)
    {
        if (lastElement != nullptr)
        {
            Move(lastElement->prevElement);

            auto copy = std::move(lastElement->element);
            Push(copy);
        }
    }
alexey-malov commented 7 years ago
        BOOST_AUTO_TEST_CASE(this_test_will_probably_fail)
        {
            CMyStack<std::string> s1;
            s1.Push("kjhlskjfhsdkljfhslkjfhskljfhs dlfkjhsdlfkjshf 1");
            s1.Push("kjhlskjfhsdkljfhslkjfhskljfhs dlfkjhsdlfkjshf 1");
            s1.Push("kjhlskjfhsdkljfhslkjfhskljfhs dlfkjhsdlfkjshf 1");
            s1.Push("kjhlskjfhsdkljfhslkjfhskljfhs dlfkjhsdlfkjshf 1");
            s1 = s1;
            BOOST_CHECK_EQUAL(s1.GetSize(), 4);
            s1.Pop();
            s1.Pop();
            s1.Pop();
            s1.Pop();
            BOOST_CHECK(s1.IsEmpty());
        }
alexey-malov commented 7 years ago
    void Pop()
    {
        std::shared_ptr<Node> tmpNode = m_lastElement;

        if (IsEmpty())
        {
            throw std::domain_error("Can't pop element from empty stack.");
        }

        m_lastElement = m_lastElement->prevElement;

        tmpNode.reset();

        --m_size;
    }
alexey-malov commented 7 years ago
    int GetSize()const
    {
        return(m_size);
    }
alexey-malov commented 7 years ago
    void Copy(CMyStack const &stack)
    {
        Clear();
        auto tmpNode = stack.m_lastElement;

        auto seed = std::make_shared<Node>();
        auto prevNode = seed;

        seed->element = tmpNode->element;

        tmpNode = tmpNode->prevElement;

        while (tmpNode != nullptr)
        {
            auto newNode = std::make_shared<Node>();
            newNode->element = tmpNode->element;

            prevNode->prevElement = newNode;
            prevNode = newNode;

            tmpNode = tmpNode->prevElement;
        }

        m_size = stack.GetSize();
        m_lastElement = seed;
    }
alexey-malov commented 7 years ago
    struct Node
    {
        T element = T();
        std::shared_ptr<Node> prevElement = nullptr;
    };
alexey-malov commented 7 years ago
    void Move(CMyStack &stack)
    {
        if (*this != stack)
        {
            m_lastElement = stack.m_lastElement;
            m_size = stack.GetSize();

            stack.m_lastElement = nullptr;
            stack.m_size = 0;
        }
    }
alexey-malov commented 7 years ago
        BOOST_AUTO_TEST_CASE(can_be_moved_via_assignment_operator)
        {
            CMyStack<int> newIntStack = (std::move(intStack));
        }

Тут у вас вызов перемещающего коснтруктора, а не оператора перемещающего присваивания

alexey-malov commented 7 years ago
    void Copy(CMyStack const &stack)
    {
        auto tmpNode = stack.m_lastElement;

        auto seed = std::make_shared<Node>();
        auto prevNode = seed;

        seed->data = tmpNode->data;

        tmpNode = tmpNode->prevNode;

        while (tmpNode != nullptr)
        {
            auto newNode = std::make_shared<Node>();
            newNode->data = tmpNode->data;

            prevNode->prevNode = newNode;
            prevNode = newNode;

            tmpNode = tmpNode->prevNode;
        }

        m_size = stack.GetSize();
        m_lastElement = seed;
    }