Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
relationer
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
#1

Некорректное ли предупреждение gcc о явно запрещенном конструкторе? - C++

21.08.2014, 00:23. Просмотров 279. Ответов 7
Метки нет (Все метки)

Здравствуйте!

У меня есть класс Uncopyable, который явно запрещает копирование. От него наследую класс, в котором есть указатели, и тут g++ выдает мне предупреждение - дескать, в классе та-та-та есть чистые указатели, и не переопределен конструктор копирования [-Weffc++]. При этом, в базовом классе он явно запрещен, т. е. о каких конструкторах копирования может идти речь?

Я так понимаю, это проблема анализатора g++, или действительно может произойти что-то плохое?

P. S. версия компилятора - 4.8.2
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2014, 00:23     Некорректное ли предупреждение gcc о явно запрещенном конструкторе?
Посмотрите здесь:

Как понимать предупреждение комилятора gcc "ISO C++ says that these are ambiguous." C++
C++ Странное предупреждение GCC
Зачем нужно явно указывать тип переменной? C++
Как явно преобразовать указатель? C++
Ошибка при удалении явно заданного указателя C++
При вынесении определения всегда ли нужно указывать функцию как inline явно? C++
C++ Как можно явно вызвать оператор преобразования?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
758 / 691 / 124
Регистрация: 27.07.2012
Сообщений: 1,980
Завершенные тесты: 3
21.08.2014, 00:26     Некорректное ли предупреждение gcc о явно запрещенном конструкторе? #2
relationer, так не понятно, приведи фрагмент кода и сообщения компилятора.
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
21.08.2014, 00:52     Некорректное ли предупреждение gcc о явно запрещенном конструкторе? #3
Цитата Сообщение от relationer Посмотреть сообщение
P. S. версия компилятора - 4.8.2
Думаю это проблема конкретно этой версии компилятора, вот например g++-4.9.0, никаких предупреждений.
relationer
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
21.08.2014, 00:56  [ТС]     Некорректное ли предупреждение gcc о явно запрещенном конструкторе? #4
Код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Uncopyable
{
public:
    Uncopyable(const Uncopyable&)            = delete;
    Uncopyable& operator=(const Uncopyable&) = delete;
protected:
    Uncopyable() = default;
    virtual ~Uncopyable() = 0;
};
 
class Object : Uncopyable
{
public:
    Object();
 
    Object(Object&&);
    Object& operator=(Object&&);
 
    virtual ~Object() noexcept;
private:
    Object* _parent;
};
Сообщения компилятора:

warning: ‘class Object’ has pointer data members [-Weffc++]
warning: but does not override ‘Object(const Object&)’ [-Weffc++]
warning: or ‘operator=(const Object&)’ [-Weffc++]
John Prick
758 / 691 / 124
Регистрация: 27.07.2012
Сообщений: 1,980
Завершенные тесты: 3
21.08.2014, 01:07     Некорректное ли предупреждение gcc о явно запрещенном конструкторе? #5
Ну, судя по всему, компилятор не в курсе, как копировать этот указатель-член, если класс некопируемый. Я так это понимаю.
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
21.08.2014, 01:20     Некорректное ли предупреждение gcc о явно запрещенном конструкторе? #6
Цитата Сообщение от relationer Посмотреть сообщение
Код:
Хотя на таком коде ругается, да.
DrOffset
6840 / 4051 / 924
Регистрация: 30.01.2014
Сообщений: 6,855
21.08.2014, 01:22     Некорректное ли предупреждение gcc о явно запрещенном конструкторе? #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
relationer, это баг.
Кстати эта опция скорее вредная, чем полезная. У нее очень много ложных или не до конца корректных срабатываний.
Например, она заставила тебя сделать виртуальный деструктор в классе Uncopyable, хотя это здесь очевидно лишнее явление.
- Ты не сможешь скастить объекты наследника к базе Uncopyable из-за приватного наследования - это раз.
- Хранить указатели на Uncopyable для последующего полиморфного удаления через нее, совершенно не требуется - это два.
Книжка Майерса хорошая, тут спору нет, но опция эта кривая очень.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2014, 01:34     Некорректное ли предупреждение gcc о явно запрещенном конструкторе?
Еще ссылки по теме:

C++ Вывод фамилии, имени и отчества с помощью функции с явно заданными или частично пропущенными параметрами
Написать функцию, принимающую параметры, заданные явно и пропущенные C++
Как освободить память занимаемую вектором и явно вернуть системе? C++
C++ Переменная в явно загруженной DLL
Почему работают методы явно не созданного объекта C++

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
21.08.2014, 01:34     Некорректное ли предупреждение gcc о явно запрещенном конструкторе? #8
Цитата Сообщение от DrOffset Посмотреть сообщение
Кстати эта опция скорее вредная, чем полезная.
Соглашусь, пробовал, она только мешает.
Yandex
Объявления
21.08.2014, 01:34     Некорректное ли предупреждение gcc о явно запрещенном конструкторе?
Ответ Создать тему
Опции темы

Текущее время: 13:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru