13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
1

push_back noncopyable

01.06.2021, 17:46. Показов 512. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот есть такой замечательный код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <vector>
#include <list>
 
using namespace std;
 
class class_t
{
public:
    class_t() = default;
    class_t(class_t&& _e) noexcept
    {
        //m_sorted.clear();
    }
private:
    //polygon_t(const polygon_t& _e) = delete; // by default
    //class_t& operator=(const class_t& _e) = delete;
};
 
 
int main()
{
    cout << "Hello World!" << endl;
    std::vector<std::list<class_t>> polystore;
    std::list<class_t> polylist;
    class_t poly;
    polylist.push_back(std::move(poly));
    //polystore.push_back(std::move(polylist));
    return 0;
}
в gcc и clang компилируется, а visual studio 2019 нет, если раскомментировать строку 28
ошибка:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.28.29910\include\xmemory:696: error: C2280: 'class_t::class_t(const class_t &)': attempting to reference a deleted function
Но совершенно не ругается при выполнении строки 27. И вообщемто и не должен ругаться.
Очень тороплюсь, а так бы поисследовал сам.
Если мне не изменяет память, то требуются конструкторы noexcept чтоб вся это бодяга с перемещением работала.
Возможно в этом дело.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2021, 17:46
Ответы с готовыми решениями:

Push_back
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;iterator&gt; #include &lt;algorithm&gt; using namespace...

Push_back(1.)
Доброго времени суток, уважаемые форумчане! Ковыряя чужой код, наткнулся на конструкцию: ...

push_back vs emplace_back
собственно тема обсуждалась там, я сделал вывод, что надо использовать emplace_back теперь, вроде...

Push_back и стандарт С++
vector&lt;int&gt; vA; vA.push_back(s); В случае, если в vA нет свободного места, выделяется новое,...

6
6085 / 3445 / 1400
Регистрация: 07.02.2019
Сообщений: 8,755
01.06.2021, 19:28 2
Цитата Сообщение от squareroot Посмотреть сообщение
Возможно в этом дело.
Угу, у std::list move конструктор не noexcept.
Кликните здесь для просмотра всего текста
1
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
01.06.2021, 19:37  [ТС] 3
Цитата Сообщение от zayats80888 Посмотреть сообщение
Угу, у std::list move конструктор не noexcept.
Кликните здесь для просмотра всего текста
А лечить как это ? Есть способ ?
0
фрилансер
5491 / 5089 / 1045
Регистрация: 11.10.2019
Сообщений: 13,309
01.06.2021, 19:42 4
Цитата Сообщение от squareroot Посмотреть сообщение
Есть способ
предлагаю варианты:
1) обернуть std::list в std::unique_ptr
2) или можно отказаться от std::list
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
01.06.2021, 20:15 5
Цитата Сообщение от squareroot Посмотреть сообщение
А лечить как это ? Есть способ ?
Просто не складывай std::list и std::map в std::vector
0
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
01.06.2021, 20:18  [ТС] 6
Интересные ребята.
Я тут по пьяной лавочки выбрал список, а не вектор.
0
Вездепух
Эксперт CЭксперт С++
11685 / 6364 / 1723
Регистрация: 18.10.2014
Сообщений: 16,037
01.06.2021, 21:26 7
Цитата Сообщение от zayats80888 Посмотреть сообщение
Угу, у std::list move конструктор не noexcept.
Более формально: у std::list конструктор перемещения может быть как noexcept, так и не noexcept. Стандарт разрешает оба варианта. В MSVC++ он не является noexcept, а в GCC и Clang - является.
0
01.06.2021, 21:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2021, 21:26
Помогаю со студенческими работами здесь

Vector . push_back
Доброго времени суток! Помогите пожалуйста поправить код!! #include &lt;vector&gt; #include...

Итератор и push_back
Здравствуйте! Я тут заметил, если я создал итератор на начало вектора, а потом сделал push_back(),...

Метод push_back()
строка 21 → Для чего нужен метод resize ? void ZLab10::wektor() { vector&lt;double&gt; wektor; ...

Push_back и emplace_back
Всем привет. Может кто нибудь подсказать для чего в STL контейнерах используется, например в...

почему не работает push_back?
#include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;list&gt; using namespace std; struct...

Ошибка push_back() в vector
Доброго времени суток. Сразу код : #include &quot;stdafx.h&quot; #include &quot;expat.h&quot; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru