| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Как правильно организовать конструктор |
| Автор: oper54 14.9.2005, 13:03 | ||||
| Есть класс типа могут быть не точности, пишу с головы
Вот... В классе еще куча всяких проверок чейчас это не существенно. Конструктор с параметрами у меня не работает, тогда как метод Сreate - выполняеться и данные нормально копируются. Подскажите в чем моя ошибка, или может я вообще не правильно организовую весь класс. Добавлено @ 13:10 Копирование тоже не работает
|
| Автор: _hunter 14.9.2005, 13:45 |
| всегда думал что memcpy() имеет три параметра... ( это я про конструктор с параметрами ) + что именно в нем не работает? так: memcpy(this, &Style, sizeof(CStyle)); классы копировать нельзя -- никто не гарантирует что все данные класса расположены в одном месте и последовательно. нужно копировать все члены отдельно |
| Автор: Дрон 14.9.2005, 13:45 |
| А в чём заключается "неработа" конструктора с параметрами. На вид, вроде, правильный. А вот конструктор копирования у совершенно неправильный. |
| Автор: oper54 15.9.2005, 17:26 | ||
_hunter да хоть и не классы, это я в примере так написал (буду знать теперь что классы нельзя копировать), а про memcpy я знаю что три параметра(опечатка). Дрон неработка в том что он вываливается по assert... собственно это и стало причиной создания топика, как я уже говорил create то работает... |
| Автор: Дрон 15.9.2005, 17:36 | ||
Так а где вываливается-то? |
| Автор: Vyacheslav 16.9.2005, 08:39 | ||||
Ничего себе правильный!
Если Вы полагаете, что вызовом CStyle() - производите инициализацию по умолчанию, то ошибаетесь. Такой вызвов означает, что в теле конструктора Вы создаете еще один экземпляр класса и тут же его уничтожаете. Таким образом вот эта операция в конструкторе с параметром не выполняется для данного экземпляра класса
то есть память не выделяется |
| Автор: oper54 16.9.2005, 16:26 |
| Vyacheslav вот это я и хотел узнать.... А как же мне тогда поступить? Vyacheslav кстати я не говорил что класс написан правильно, имеено по тому что не знаю как должно быть правильно. Добавлено @ 16:27 Vyacheslav выделить память прямо в конструкоре с параметрами, а остальное остается таким же? |
| Автор: _hunter 16.9.2005, 17:04 |
| вынеси код инициализации в приватную функцию и вызывай ее из конструкторов... |