42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
|
||||||
1 | ||||||
по поводу memset15.10.2016, 19:36. Показов 1907. Ответов 7
Метки нет (Все метки)
здравствуйте, есть, допустим, такой код(rtti включен):
0
|
15.10.2016, 19:36 | |
Ответы с готовыми решениями:
7
memset() memset memset, memcpy Функция memset |
Вездепух
11694 / 6373 / 1723
Регистрация: 18.10.2014
Сообщений: 16,062
|
|
15.10.2016, 19:40 | 2 |
Абсолютно некорректно.
Да, указатель на таблицу будет успешно убит. Просто повезло, что данный код не использует разрушенные части класса.
1
|
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
|
|
15.10.2016, 21:37 [ТС] | 4 |
TheCalligrapher, хм, а как корректно в таком случае? так как croessmah написал?
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
15.10.2016, 21:47 | 5 |
Смотря какая задача (зачем это нужно?).
Но в любом случае - делать memcpy, memset и т.п. для non-trivial классов категорически нельзя. Добавлено через 45 секунд Он написал пример, когда выстрел будет в ногу, а не в воздух.
1
|
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
|
|
15.10.2016, 22:21 [ТС] | 6 |
да вопрос знакомого... задумался вот, благодаря ему
а memcpy то почему нельзя?
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
15.10.2016, 23:05 | 7 |
если у класса есть конструктор копии,
то для копирования объекта именно его и нужно использовать. только сам класс знает, как правильно себя копировать. если конструктор копии запрещен - его в принципе нельзя копировать. для нетривиальных классов, memcpy - это хак, который позволяет сделать копию объекта наплевав на все контракты класса.
1
|
Вездепух
11694 / 6373 / 1723
Регистрация: 18.10.2014
Сообщений: 16,062
|
|
16.10.2016, 06:39 | 8 |
Короткий ответ: потому что стандартом языка запрещено, кроме некоторых тривиальных категорий классов.
Длинный ответ: класс может обладать скрытой (или открытой) внутренней структурой, которую невозможно правильно перенести при помощи memcpy . Например, объект класса может содержать указатели на части самого себя.
1
|
16.10.2016, 06:39 | |
16.10.2016, 06:39 | |
Помогаю со студенческими работами здесь
8
Аналог memset() из C++ в C# Не найден memset Неправильное использование memset работа с memset в masm realloc vs (malloc + memset) Есть ли аналог memset Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |