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

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

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

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

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

Как понимать предупреждение комилятора 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...

Как явно преобразовать указатель? - C++
Здравствуйте! Изучая возможности наследования столкнулся со следующим утверждением: "Если для объекта производного класса объявить...

Переменная в явно загруженной DLL - C++
Здравствуйте! У меня есть глобально объявленная переменная std::string adres_fayla; в dll. Эта ДЛЛ грузится к проекту явно. Как...

Как можно явно вызвать оператор преобразования? - C++
Доброго времени суток Как можно явно вызвать такой оператор преобразования? struct CL { template <class A, class B, class...

Зачем нужно явно указывать тип переменной? - C++
Всем привет! Объясните зачем нужно явно указывать тип переменной? Например в С++ это обязательно, а php нет. Просто говорят что не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
21.08.2014, 00:26     Некорректное ли предупреждение gcc о явно запрещенном конструкторе? #2
relationer, так не понятно, приведи фрагмент кода и сообщения компилятора.
gray_fox
What a waste!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,449
Завершенные тесты: 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
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
21.08.2014, 01:07     Некорректное ли предупреждение gcc о явно запрещенном конструкторе? #5
Ну, судя по всему, компилятор не в курсе, как копировать этот указатель-член, если класс некопируемый. Я так это понимаю.
gray_fox
What a waste!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,449
Завершенные тесты: 3
21.08.2014, 01:20     Некорректное ли предупреждение gcc о явно запрещенном конструкторе? #6
Цитата Сообщение от relationer Посмотреть сообщение
Код:
Хотя на таком коде ругается, да.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
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++
Помогите, пожалуйста, с этой проблемой. Уже 2 недели не могу сдать лабу "main.cpp" char* a=new char; char b=0; char* c=new char;...

Почему работают методы явно не созданного объекта - C++
Привет. Беглый поиск не дал ответа на вопрос, почему работает нижеприведённый код: class SomeClass { public: ...

Написать функцию, принимающую параметры, заданные явно и пропущенные - C++
1. Написати функцію із параметрами за замовчуванням відповідно до варіанту, продемонструвати різні способи виклику функції: • з...

Как освободить память занимаемую вектором и явно вернуть системе? - C++
Здравствуйте! Вопрос: Как освободить память занимаемую вектором и явно вернуть системе?


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

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

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