Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
relationer
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
1

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

21.08.2014, 00:23. Просмотров 854. Ответов 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
В функции есть строчки и компилятор ругается на последнуюю: char *p = NULL; ...

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

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

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

Предупреждение, при передачи параметров в конструкторе
Из MainWindow вызывается класс Dialog, и ему нужно передать указатель на...

7
John Prick
837 / 768 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
21.08.2014, 00:26 2
relationer, так не понятно, приведи фрагмент кода и сообщения компилятора.
0
gray_fox
What a waste!
1554 / 1259 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 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
837 / 768 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
21.08.2014, 01:07 5
Ну, судя по всему, компилятор не в курсе, как копировать этот указатель-член, если класс некопируемый. Я так это понимаю.
0
gray_fox
What a waste!
1554 / 1259 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
21.08.2014, 01:20 6
Цитата Сообщение от relationer Посмотреть сообщение
Код:
Хотя на таком коде ругается, да.
0
DrOffset
9013 / 4860 / 1196
Регистрация: 30.01.2014
Сообщений: 7,942
21.08.2014, 01:22 7
Лучший ответ Сообщение было отмечено relationer как решение

Решение

relationer, это баг.
Кстати эта опция скорее вредная, чем полезная. У нее очень много ложных или не до конца корректных срабатываний.
Например, она заставила тебя сделать виртуальный деструктор в классе Uncopyable, хотя это здесь очевидно лишнее явление.
- Ты не сможешь скастить объекты наследника к базе Uncopyable из-за приватного наследования - это раз.
- Хранить указатели на Uncopyable для последующего полиморфного удаления через нее, совершенно не требуется - это два.
Книжка Майерса хорошая, тут спору нет, но опция эта кривая очень.
3
gray_fox
What a waste!
1554 / 1259 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
21.08.2014, 01:34 8
Цитата Сообщение от DrOffset Посмотреть сообщение
Кстати эта опция скорее вредная, чем полезная.
Соглашусь, пробовал, она только мешает.
0
21.08.2014, 01:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2014, 01:34

GCC Сборка 32 разрядной версии GCC 64 разрядным GCC
Доброго времени суток. Возникла необходимость под 32х разрядный Linux, собрать...

Предупреждение "missing initializer" для структур в gcc
Допустим имеется следующий код: #include <stdio.h> struct some { ...

Авторизация на запрещенном сайте
Здравствуйте, нужно авторизоваться за запрещенном сайте, на который пускает...


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

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

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