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

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

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

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

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

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

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

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

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

Странное предупреждение GCC - C++
В функции есть строчки и компилятор ругается на последнуюю: char *p = NULL; ...

[gcc] отказался подавлять предупреждение -Wunused-function - C++
добрый день. есть подозрение на баг в компиляторах gcc. (воспроизводил на разных версиях) хотя допускаю, что возможно я сам...

Как понимать предупреждение комилятора gcc "ISO C++ says that these are ambiguous." - C++
предупреждение: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion...

Gcc выкидывает функцию если обращаемся к ней по указателю а не явно - C Linux
Здравствуйте. Собственно вопрос. gcc выкидывает (оптимизирует) функцию если мы обращаемся к ней по указателю а не явно. Подскажите,...

Предупреждение, при передачи параметров в конструкторе - C++ Qt
Из MainWindow вызывается класс Dialog, и ему нужно передать указатель на MainWindow(который его и вызывает), чтобы диалог мог общаться с...

Предупреждение "missing initializer" для структур в gcc - C (СИ)
Допустим имеется следующий код: #include <stdio.h> struct some { int a; int b; }; int main() { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
21.08.2014, 00:26 #2
relationer, так не понятно, приведи фрагмент кода и сообщения компилятора.
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
21.08.2014, 00:52 #3
Цитата Сообщение от relationer Посмотреть сообщение
P. S. версия компилятора - 4.8.2
Думаю это проблема конкретно этой версии компилятора, вот например g++-4.9.0, никаких предупреждений.
0
relationer
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
21.08.2014, 00:56  [ТС] #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++]
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
21.08.2014, 01:07 #5
Ну, судя по всему, компилятор не в курсе, как копировать этот указатель-член, если класс некопируемый. Я так это понимаю.
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
21.08.2014, 01:20 #6
Цитата Сообщение от relationer Посмотреть сообщение
Код:
Хотя на таком коде ругается, да.
0
DrOffset
7138 / 4279 / 964
Регистрация: 30.01.2014
Сообщений: 7,067
21.08.2014, 01:22 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
relationer, это баг.
Кстати эта опция скорее вредная, чем полезная. У нее очень много ложных или не до конца корректных срабатываний.
Например, она заставила тебя сделать виртуальный деструктор в классе Uncopyable, хотя это здесь очевидно лишнее явление.
- Ты не сможешь скастить объекты наследника к базе Uncopyable из-за приватного наследования - это раз.
- Хранить указатели на Uncopyable для последующего полиморфного удаления через нее, совершенно не требуется - это два.
Книжка Майерса хорошая, тут спору нет, но опция эта кривая очень.
3
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
21.08.2014, 01:34 #8
Цитата Сообщение от DrOffset Посмотреть сообщение
Кстати эта опция скорее вредная, чем полезная.
Соглашусь, пробовал, она только мешает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2014, 01:34
Привет! Вот еще темы с ответами:

Авторизация на запрещенном сайте - C#
Здравствуйте, нужно авторизоваться за запрещенном сайте, на который пускает только через браузер TOR. Как реализовать?

Skype при запрещенном интернете - Mikrotik
Добрый день. Имеется маршрутизатор Mikrotik RB493AH. Пользователю, при помощи правил firewall, запрещен доступ в интернет. ...

Явно не тривиальная задача - Теория вероятностей
Студент выучил из 30 вопросов только 24, в билете три вопроса. Какая вероятность того что он ответит хотя бы на один.

Не явно типизированные коллекции в if - else - C#
var myFriends = ; if (checkBox1.Checked == false) { myFriends =...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.08.2014, 01:34
Ответ Создать тему
Опции темы

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