Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1

Умные указатели

21.11.2018, 11:35. Показов 3091. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Что-то разобраться до конца не могу, тк умных указателей не так то мало оказывается. Мне интересно, если я выделяю память под массив с константным размером, то какой указатель мне лучше использовать? а если память динамически меняется?
unique_ptr и auto_ptr - это аналоги просто с разных библиотек?
Реализацию каких хотя бы 3х мне лучше всего знать, которые чаще используются в работе и могут пригодиться мне при трудоустройстве? Тк все учить уже мозг вскипать начинает, из-за того, что не работая в какой-то команде, а просто сидя на самообучении, я особо не представляю в какой из своих скудных проектов можно применить тот или иной smart_ptr.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.11.2018, 11:35
Ответы с готовыми решениями:

Умные указатели
#include <fstream> #include <algorithm> #include <vector> #include <iostream> #include <memory> using namespace std; ...

Умные указатели
Пишу класс дерево поиска:template<typename T, typename Compare> class AvlTree { private: struct Node { T...

Умные указатели
Насколько я понял для того что бы предотвратить передачу права владения используют const. Код из примера: template <class T> ...

6
112 / 91 / 31
Регистрация: 24.10.2018
Сообщений: 336
21.11.2018, 11:50
auto_ptr лучше забыть.
Почитать и понять разницу между unique_ptr и shared_ptr. В будущем еще про weak_ptr.
Цитата Сообщение от Джон Кофи Посмотреть сообщение
если я выделяю память под массив с константным размером, то какой указатель мне лучше использовать?
Зависит не от размера массива, а от того, как ты с указателем работаешь в своем коде: куда и как передавать хочешь, кто отвечает за очистку и т. д..
0
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
21.11.2018, 13:52  [ТС]
Цитата Сообщение от krolligator Посмотреть сообщение
auto_ptr лучше забыть.
Почитать и понять разницу между unique_ptr и shared_ptr. В будущем еще про weak_ptr.
нашел хорошую статью на хабре 12го года (https://habr.com/post/140222/); разберу еще пару раз, чтобы детальнее уяснить
Цитата Сообщение от krolligator Посмотреть сообщение
auto_ptr лучше забыть.
объясните почему, мне интересно, я себе запишу (конспектирую некоторые моменты).

Добавлено через 39 минут
что еще спросить хотел. У меня есть программа, которая работает с массивами. В ней базовый класс, от которого унаследованы еще 3. Я сделал в нем функцию, которая принимает массив и освобождает память занятую им (деструктор, короче). Эту функцию я поставил в каждый из методов унаследованных классов, в которых выделяется память на время действия функции.
Дак вот - я сделал правильно или это лишнее?, тк память ведь будет сама освобождаться после "разрушения" объекта класса деструктором самого класса по умолчанию.
0
112 / 91 / 31
Регистрация: 24.10.2018
Сообщений: 336
21.11.2018, 14:02
Цитата Сообщение от Джон Кофи Посмотреть сообщение
объясните почему, мне интересно, я себе запишу (конспектирую некоторые моменты).
Потому что его реализация косая и он уже deprecated
Деструктор класса автоматически вызовет деструктор мембера. Если мембер - это unique_ptr, то память освободится автоматически. Если мембер - это указатель, то деструктор класса сам ничего освобождать не будет.
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
21.11.2018, 14:12
Лучший ответ Сообщение было отмечено Джон Кофи как решение

Решение

Цитата Сообщение от Джон Кофи Посмотреть сообщение
объясните почему, мне интересно
Просто auto_ptr устарел. Применялся до с++11, но тоже с большой острожностью, из-за своего своеобразного дизайна. А именно, копирование такого указателя предполагает передачу владения новому объекту, что противоречит семантике копирования. Из-за этого вполне невинно выглядящий код мог привести к ошибке.
C++
1
2
3
4
5
std::auto_ptr<int> p(new int(10));
 
foo(p); // foo принимает std::auto_ptr<int> по значению
 
std::cout << *p << std::endl; // ошибка: p больше не владеет ресурсом
Кроме этого владеть таким образом массивом в динамической памяти нельзя (auto_ptr всегда вызывает delete, про delete[] ничего не знает).
Также объекты таких указателей нельзя было сохранять в некоторых контейнерах (например в std::vector образца C++98), что тоже иногда мешало.
1
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
21.11.2018, 14:14  [ТС]
Цитата Сообщение от krolligator Посмотреть сообщение
мембер
это кто такой? объект, который занимает память, грубо говоря?

Добавлено через 1 минуту
krolligator, DrOffset, спасибо вам, в общем-то разобрался
0
112 / 91 / 31
Регистрация: 24.10.2018
Сообщений: 336
21.11.2018, 14:23
Цитата Сообщение от Джон Кофи Посмотреть сообщение
это кто такой? объект, который занимает память, грубо говоря?
Это член класса.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2018, 14:23
Помогаю со студенческими работами здесь

Умные указатели
Правильно ли я понял, что умный указатель - это просто шаблон класса, содержащий в себе указатель Type *p и его delete в деструкторе?

умные указатели
у меня например есть куча юнитов, у каждого из них есть указатель на игровой ресурс (допустим камень). Есть такая задумка: когда камень...

Умные указатели
Здравствуйте! вопрос указатель auto_ptr почитала литературу, там написано он считывает и удаляет ссылки, т.е. он получает какие-то...

Умные указатели
Разбираюсь с умными указателями. Попытался переписать кусок кода используя shared_ptr. Было Btree::Btree() { m_root=nullptr; } ...

Прата и умные указатели
Читаю Прата С. - Язык программирования С++. Лекции и упражнения - 2011, стр. 886: Пишу, компилирую - получаю ошибки: Кто не прав...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru