Описание тега deleted-functions

В C++11 появилась возможность помечать функции-члены как удаленные, что означает, что любая попытка вызова этих функций вызывает ошибку компиляции. Это можно использовать для предотвращения неправильного использования класса. Например, если класс предназначен для управления уникальным ресурсом, объект этого класса не должен копироваться. Этого можно достичь, удалив его конструктор копирования и функции присваивания копии.
1 ответ

Почему конструктор удаленных копий не позволяет использовать другой конструктор с полиморфным типом?

Интересно, почему эта программа не компилируется (такое же поведение на msvc, gcc и clang): #include <iostream> using namespace std; struct Action { virtual void action() { cout << "Action::action()\n"; } }; struct ActionDecorator : Acti…
3 ответа

Чем "=default" отличается от "{}" для конструктора и деструктора по умолчанию?

Я первоначально разместил это как вопрос только о деструкторах, но теперь я добавляю рассмотрение конструктора по умолчанию. Вот оригинальный вопрос: Если я хочу дать своему классу деструктор, который является виртуальным, но в остальном такой же, к…
1 ответ

Есть ли смысл объявлять удаленную функцию как noexcept?

Рассмотрим два возможных определения класса: Выставка: struct A { A() = delete; }; Выставка': struct A { A() noexcept = delete; } Есть ли смысл объявлять удаленную функцию как noexcept?
1 ответ

Использование на основе диапазона для с удаленной функцией std:: set<std:: unique_ptr <T >>

Я пытаюсь использовать итератор на основе диапазона с набором unique_ptr экземпляры, но я получаю следующую ошибку компиляции: C2280: 'std::unique_ptr&lt;Component,std::default_delete&lt;_Ty&gt;&gt;::unique_ptr(const std::unique_ptr&lt;_Ty,std::defa…
10 май '14 в 17:06
1 ответ

Как запретить инициализацию пустого списка?

У меня есть класс, в котором нет участников. И поэтому он не предназначен для реализации. Итак, я удалил по умолчанию кр. Это запрещает любую конструкцию, кроме инициализации списка. Есть ли способ это тоже запретить? class Empty{ //No non-static da…
2 ответа

Базовый класс C++ вызывает удаленную или недоступную функцию

У меня есть player переменная, которая содержит вектор Resource класс, который происходит от Name а также ID учебный класс. Проблема заключается в том, что я компилирую код, и во время компиляции появляются следующие ошибки. resources.h(27): note: '…
24 июл '17 в 10:00
2 ответа

Удаление конструкторов копирования и операторов присваивания копии. Какие из них необходимы?

У меня есть вариант использования, что мой объект не должен быть скопирован каким-либо образом. Я написал преувеличенный полный список удалений конструктора копирования и оператора копирования. Их так много, что я не могу понять, какие из них исполь…
4 ответа

Как на месте инициализировать массив?

Как я могу инициализировать массив без копирования или создания временных элементов? Когда элемент имеет явно deleted копируя или перемещая конструктор, я могу инициализировать массив только в том случае, если у элемента есть ctor по умолчанию или c…
2 ответа

Попытка сослаться на удаленную функцию при обмене приоритетными очередями

Я просто пытался обменять данные между двумя приоритетными очередями и получил эту ошибку. Я также немного погуглил и до сих пор не знаю, что здесь не так. #include &lt;queue&gt; class Node { public: int idx; }; auto greater = []( const Node&amp; a,…
14 июн '17 в 16:27
1 ответ

Специализированная шаблонная функция с удаленным "общим" случаем не скомпилируется с g++ <=4.8.0 и clang++

Компиляция проекта с более старой версией g++ (4.8.0, MinGW) я обнаружил, что этот код не компилируется: template&lt;typename T&gt; void foo() = delete; template&lt;&gt; void foo&lt;int&gt;(){} int main() { foo&lt;int&gt;(); return 0; } Кажется, что…
2 ответа

Заставить компилятор выдавать ошибку при перемещении конструктора, не определенного с удаленным копированием базового класса ctor

Рассмотрим базовый класс, который предотвращает создание копии и назначение копирования следующим образом: class NonCopyable { public: NonCopyable() = default; ~NonCopyable() = default; NonCopyable(NonCopyable const&amp;) = delete; NonCopyable&amp; …
12 дек '18 в 16:18
0 ответов

Инициализация класса с удаленным конструктором по умолчанию в различных стандартных версиях C++11

В дубликате нет ответа хотя бы на пункты 1 и 4 моего вопроса. И они самые важные. Я могу удалить другие пункты, но прошу не закрывать весь вопрос. 1. В коде ниже obj1 создается нормально. Но если я попытаюсь раскомментировать объекты obj2 и obj3, ко…
1 ответ

Опасность использования виртуальных базовых операторов перемещения, когда они теперь могут использоваться?

Это касается решения проблемы C++ http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html. Резюме: template&lt;typename T&gt; struct wrap { wrap() = default; wrap(wrap&amp;&amp;) = default; wrap(const wrap&amp;) = default; T t; }; struct S { S(…
22 июн '13 в 16:29
2 ответа

Оператор преобразования против удаленного конструктора

Пожалуйста, смотрите следующий код: struct X; struct Y { Y() {} Y(X&amp;) = delete; }; struct X { X() {} operator Y() { return{}; } }; int main() { X x; static_cast&lt;Y&gt;(x); } Здесь Yконструктор брал X явно удален, в то время как X имеет операто…
2 ответа

Как я могу запретить вызовы const функции-члена объекта rvalue в C++ 2011?

Следующий код #include &lt;vector&gt; #include &lt;string&gt; #include &lt;iostream&gt; std::string const&amp; at(std::vector&lt;std::string&gt; const&amp; n, int i) { return n[i]; } std::vector&lt;std::string&gt; mkvec() { std::vector&lt;std::strin…
28 апр '11 в 01:33
1 ответ

Поток C++ в unordered_map (без конструктора копирования)

Я пытаюсь найти способ получить поток из unordered_map в C++. Тем не менее, я получаю std::thread::thread(const std::thread &), пытающийся ссылаться на удаленную функцию. Пример: #include "stdafx.h" #include &lt;unordered_map&gt; #include &lt;thread…
27 фев '18 в 22:25
1 ответ

Ошибка: использование удаленной функции boost::filesystem3::directory_iterator

У меня есть эта странная ошибка, когда я пытаюсь скомпилировать проект C++ и qt: error: use of deleted function ‘boost::filesystem3::directory_iterator::directory_iterator(const boost::filesystem3::directory_iterator&amp;)’ В коде нигде не используе…
27 мар '14 в 01:05
1 ответ

Копирование параметра вызывает удаленный конструктор, когда этот конструктор не должен вызываться

#include &lt;memory&gt; template &lt;typename T&gt; class Wrapper { public: Wrapper() = delete; Wrapper(const Wrapper&amp;) = delete; Wrapper(Wrapper&amp;&amp;) = delete; ~Wrapper() = default; Wrapper(const T&amp;) = delete; Wrapper(T&amp;&amp; in) …
14 сен '17 в 19:02
1 ответ

Принудительный ход только семантики

Я относительно новичок в C++11, хотя я использовал предыдущие версии в течение многих лет. Это правильный способ обеспечить, чтобы объект был только подвижным? class CResource { public: CResource(); CResource(CResource &amp;&amp;); CResource &amp; o…
3 ответа

Может ли какая-либо функция быть удаленной?

В рабочем проекте явно указывается, что функции по умолчанию должны быть специальными функциями-членами (например, конструктор копирования, конструктор по умолчанию и т. Д. (§8.4.2.1-1)). Что имеет смысл. Однако я не вижу такого ограничения на удале…
20 май '10 в 15:37