|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.03.2015, 02:22 | #21 | |
Заблокирован
Регистрация: 02.08.2014
Сообщений: 30
|
Цитата:
З.Ы С меня + в репу будут просто сейчас не добавляет...("Вы должны добавить отзыв еще кому-то прежде чем оставить отзыв _Bers") |
|
10.03.2015, 05:54 | #22 | ||
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,618
|
Цитата:
Цитата:
Наверняка, дело не только в delete. В буста умные указатели на массив - это особые типы (shared_array, scoped_array и может быть еще что-то). Вобще про проблемы таких велосипедов у Маерса целый раздел (только про смартпоинтеры). Про массивы он там тоже упоминает, но примерно так: "это сложно и ненужно, т.к. есть вектора и прочее". У него там есть несколько реализаций вроде бы, но в основном он описывал что-то типа auto_ptr, который уже из стандарта выпилили даже. Про проблемы с потоками тоже там вроде было... |
||
10.03.2015, 11:01 | #23 | |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
Цитата:
Благодарить в репутацию. Проклинать — туда же
|
|
10.03.2015, 19:16 | #24 |
Заблокирован
Регистрация: 02.08.2014
Сообщений: 30
|
Переделал...
Код:
|
11.03.2015, 12:49 | #25 |
Новичок
Джуниор
Регистрация: 11.03.2015
Сообщений: 1
|
Привет,
Хорошая реализация. Но нужно поправить оператор присваивания =. У Вас текущий указатель может ссылаться на другой объект типа Т. Поэтому в нем необходимо уменьшить счетчик ссылок (*copy)--, и сделать очистку памяти если счетчик в еденице окажется. Для иллюстрации проблемы подумайте что будет если бы был такой код: smart_ptr <Temp> ptr1(new Temp); smart_ptr <Temp> ptr2(new Temp); ptr2=ptr1; Последний раз редактировалось alusov; 11.03.2015 в 12:59. |
11.03.2015, 13:33 | #26 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
нет, она - не хорошая.
1. конструкторы копии принимают только мутабельные объекты. 2. нет конструкторов для временных объектов. 3. нет методов для работы с константными объектами. 4. методы доступа ничего не проверяют, и никак не предупреждают программиста о возможных неисправностях. например - о попытке доступа к несуществующему объекту. 5. оператор присваивания вы уже итак упомянули - баг. 6. отсутствуюет защита thread-safe 7. отсутствуют exception-гарантии. 8. счетчик ссылок реализован имеет тип int, а должен быть size_t, или unsigned 9. смарт не способен вызвать корректный диструктор для полиморфного типа. 10. счетчик реализован не оптимально: двойная аллокация, хотя можно было бы сделать только 1 аллокацию. 11. отсутствуют exception-гарантии при захвате ресурса 12. отсутствует возможность посетить кастомную функцию удаления ресурса. 13. отсутствует возможность узнать количество ссылок. 14. отсутствует возможность узнать пуст ли смарт-поинтер. 15. не реализован swap. 16. не реализованы операции сравнения двух смарт-поинтеров. Этот список можно продолжать ещё долго. Конечно не стоит ожидать соотвествия со стандартным аналогом от новичка. Однако пункты: 1 - 5, 8, 13 - 14 - обязательный минимум. |
11.03.2015, 21:17 | #27 | ||
Заблокирован
Регистрация: 02.08.2014
Сообщений: 30
|
Цитата:
Цитата:
А какие методы нужны для константных объектов? |
||
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Правильна ли такая реализация списка из указателей на базовый класс? | Archet | Общие вопросы C/C++ | 14 | 18.01.2012 16:08 |
АТД: Реализация списка с использованием указателей | Suslik963 | Помощь студентам | 1 | 17.11.2010 10:06 |
Ищу умных людей по с++ | Maver1k[Kiev] | Свободное общение | 3 | 24.03.2010 10:22 |
прошу помощи у умных людей... | lesimel | C++ Builder | 12 | 21.12.2009 09:09 |