Конструктор по умолчанию
От: Kisl0id  
Дата: 05.07.04 12:57
Оценка:
class ex
{
    int a;
public:
    ex(int p) { a = p; }
};


У меня возник спор с одним человеком, я говорю что в этом классе создается конструктор по умолчанию, т.е. он создается неявно, а мой оппонент говорит что он не создается, аргументируя это тем что нельзя сделать так :

ex obj;


Компилятор говорит, что нету конструктора по умолчанию.
А ведь он есть, да ?
Re: Конструктор по умолчанию
От: Vamp Россия  
Дата: 05.07.04 12:59
Оценка: +1 :))
K>Компилятор говорит, что нету конструктора по умолчанию.
K>А ведь он есть, да ?
Как невидимый заяц? Нет уж, умерла так умерла — если компилятор говорит, что конструктора нет, значит его нет.
Да здравствует мыло душистое и веревка пушистая.
Re: Конструктор по умолчанию
От: davenger  
Дата: 05.07.04 12:59
Оценка: +1
Здравствуйте, Kisl0id, Вы писали:

K>
K>class ex
K>{
K>    int a;
K>public:
K>    ex(int p) { a = p; }
K>};
K>


K>У меня возник спор с одним человеком, я говорю что в этом классе создается конструктор по умолчанию, т.е. он создается неявно, а мой оппонент говорит что он не создается, аргументируя это тем что нельзя сделать так :


K>
K>ex obj;
K>


K>Компилятор говорит, что нету конструктора по умолчанию.

K>А ведь он есть, да ?

Нет его. Если ты определил какой-нить конструктор, компилятор уже не создаёт тривиальный конструктор по-умолчанию.
Re: Конструктор по умолчанию
От: LaptevVV Россия  
Дата: 05.07.04 13:05
Оценка:
Здравствуйте, Kisl0id, Вы писали:

K>
K>class ex
K>{
K>    int a;
K>public:
K>    ex(int p) { a = p; }
K>};
K>


K>У меня возник спор с одним человеком, я говорю что в этом классе создается конструктор по умолчанию, т.е. он создается неявно, а мой оппонент говорит что он не создается, аргументируя это тем что нельзя сделать так :


K>
K>ex obj;
K>


K>Компилятор говорит, что нету конструктора по умолчанию.

K>А ведь он есть, да ?
Нету его. Если программист определил хоть один конструктор явно, то компилятор "умывает руки".
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Конструктор по умолчанию
От: Vamp Россия  
Дата: 05.07.04 13:12
Оценка:
LVV>Если программист определил хоть один конструктор явно, то компилятор "умывает руки".
Ни фига. А copy-ctor?
Да здравствует мыло душистое и веревка пушистая.
Re[3]: Конструктор по умолчанию
От: LaptevVV Россия  
Дата: 05.07.04 13:20
Оценка:
Здравствуйте, Vamp, Вы писали:

LVV>>Если программист определил хоть один конструктор явно, то компилятор "умывает руки".

V>Ни фига. А copy-ctor?
Да, конструктор копирования вроде создается всегда — не совсем помню это место.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Конструктор по умолчанию
От: Lorenzo_LAMAS  
Дата: 05.07.04 13:27
Оценка:
D>Нет его. Если ты определил какой-нить конструктор, компилятор уже не создаёт тривиальный конструктор по-умолчанию.

Маленькое уточнение. Создаваемый НЕЯВНО компилятором конструктор по умолчанию не обязательно тривиальный (правильнее сказать всегда нетривиальный — тривиальный он и генерить не станет)
Of course, the code must be complete enough to compile and link.
Re[4]: Конструктор по умолчанию
От: Lorenzo_LAMAS  
Дата: 05.07.04 13:32
Оценка:
LVV>Да, конструктор копирования вроде создается всегда — не совсем помню это место.

Не, не всегда. Допустим, вы его явно определите. Или, допустим, конструктор копий базового класса или какого-нибудь из членов закрыт — тут невозможно сгенерировать неявный конструктор копирования.
Of course, the code must be complete enough to compile and link.
Re[3]: Конструктор по умолчанию
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 05.07.04 13:32
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Маленькое уточнение. Создаваемый НЕЯВНО компилятором конструктор по умолчанию не обязательно тривиальный (правильнее сказать всегда нетривиальный — тривиальный он и генерить не станет)


А что понимается под понятием нетривиальный конструктор по умолчанию ? Побайтовое копирование?
HgLab: Mercurial Server and Repository Management for Windows
Re[4]: Конструктор по умолчанию
От: Vamp Россия  
Дата: 05.07.04 13:34
Оценка:
Н>А что понимается под понятием нетривиальный конструктор по умолчанию ? Побайтовое копирование?
С какого перепою? Вызов конструкторов копирования для всех членов-объектов.
Да здравствует мыло душистое и веревка пушистая.
Re[4]: Конструктор по умолчанию
От: Lorenzo_LAMAS  
Дата: 05.07.04 13:36
Оценка:
Н>А что понимается под понятием нетривиальный конструктор по умолчанию ? Побайтовое копирование?

При чем тут копирование, если мы говорили о конструкторах по умолчанию? А что понимается — вот примеры:

0. Есть базовые классы с нетривиальными конструкторами — сгенерированный неявно компилятором конструктор вызовет конструкторы базовых классов.

1. Есть члены с нетривиальными конструкторами — их тоже надо вызвать.

2. Есть виртуальные функции — сгенерированный нетривиальный конструктор, допустим, может устанавливать __vfptr

При этом определение нетривальности конструкторов в базовых классах и членах как бы рекурсивное получается.
Of course, the code must be complete enough to compile and link.
Re[5]: Конструктор по умолчанию
От: LaptevVV Россия  
Дата: 05.07.04 13:37
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

LVV>>Да, конструктор копирования вроде создается всегда — не совсем помню это место.


L_L>Не, не всегда. Допустим, вы его явно определите. Или, допустим, конструктор копий базового класса или какого-нибудь из членов закрыт — тут невозможно сгенерировать неявный конструктор копирования.

Не, это понятно! Я имел ввиду, при отсутствии явного определения. А при закрытых членах ошибка выдается? или молча не генерится?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Конструктор по умолчанию
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 05.07.04 13:38
Оценка:
Здравствуйте, Vamp, Вы писали:

Н>>А что понимается под понятием нетривиальный конструктор по умолчанию ? Побайтовое копирование?

V>С какого перепою? Вызов конструкторов копирования для всех членов-объектов.

О-о-о-о, все. На покой, на покой ...
HgLab: Mercurial Server and Repository Management for Windows
Re[6]: Конструктор по умолчанию
От: Lorenzo_LAMAS  
Дата: 05.07.04 13:38
Оценка:
LVV>Не, это понятно! Я имел ввиду, при отсутствии явного определения. А при закрытых членах ошибка выдается? или молча не генерится?

При попытке инициализации копированием выдается сообщение об ошибке
Of course, the code must be complete enough to compile and link.
Re[7]: Конструктор по умолчанию
От: LaptevVV Россия  
Дата: 05.07.04 13:40
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:


LVV>>Не, это понятно! Я имел ввиду, при отсутствии явного определения. А при закрытых членах ошибка выдается? или молча не генерится?


L_L>При попытке инициализации копированием выдается сообщение об ошибке

Спасибо!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Конструктор по умолчанию
От: Кодт Россия  
Дата: 05.07.04 13:47
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>>>Если программист определил хоть один конструктор явно, то компилятор "умывает руки".

V>>Ни фига. А copy-ctor?
LVV>Да, конструктор копирования вроде создается всегда — не совсем помню это место.

Если явно не указать, то копиктор, присваивание и деструктор (тривиальные) создаются по требованию. Нет требования — нет и методов.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.