Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Mikhail1990
16 / 16 / 3
Регистрация: 22.03.2014
Сообщений: 208
#1

Объясните как выделяется память под умные указатели - C++

15.08.2015, 13:59. Просмотров 687. Ответов 21
Метки нет (Все метки)

Читаю книгу Праты, не могу понять этот абзац, а точнее применение операторов new [] и new и delete[] и delete с ними.

Объект auto_ptr или shared_ptr должен использоваться только для памяти,
выделенной операцией new. Память, выделенная с помощью new [ ], не подходит. Нельзя применять
auto_ptr, shared_ptr или unique_ptr для памяти, выделенной посредством операции
new либо, в случае unique_ptr, с помощью new или new [ ].
Почему нельзя применять new[].
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2015, 13:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объясните как выделяется память под умные указатели (C++):

Как выделяется память под массив string? - C++
В общем читаю книжку, там объявлены два массива int* p = new int, int* v = new string... бла бла бла ....а потом -> ...После резервирования...

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
hoggy
6538 / 2718 / 470
Регистрация: 15.11.2014
Сообщений: 5,998
Завершенные тесты: 1
15.08.2015, 17:49 #16
Цитата Сообщение от tnk500 Посмотреть сообщение
я ж говорю — одним делитером дело не ограничится. Но ведь и вы понимаете, почему так делать не нужно
мне не очевидно, почему данный функционал не включен в стандарт, как это сделанно для юник-птр.

однако, если это нужно,
то ничто не мешает организовать отдельную свободную функцию,
либо выполнить защищенное наследование и нарастить функционал.

в том, что касается "делать не нужно" - мне понятен ваш тезис.
на практике мне ни разу не было нужно подобное.
но это не означает, что это не нужно никому,
и что есть какие то противопоказания.
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,272
Завершенные тесты: 3
15.08.2015, 17:52 #17
ct0r, пожалуйста, может так может (ведь можно и Си с ООП написать, хоть это уже и сделано. Вообще программирование дает много каких возможностей). И если с С++17 (как заметил gromo) будет поддержка, тогда тем более можно будет. Но я полагаю, вы решили написать здесь чтобы помочь новичку в разъяснении некоторых моментов насчет текущего положения умных указателей в языке, а не для того чтобы показать, что вы можете, так ведь?

Добавлено через 1 минуту
hoggy, вот и подождем 17 год, и тогда свои "костыли" мастырить не надо будет)
hoggy
6538 / 2718 / 470
Регистрация: 15.11.2014
Сообщений: 5,998
Завершенные тесты: 1
15.08.2015, 17:59 #18
Цитата Сообщение от tnk500 Посмотреть сообщение
вот и подождем 17 год, и тогда свои "костыли" мастырить не надо будет)
мне по прежнему не очевиден ваш тезис:

Цитата Сообщение от tnk500 Посмотреть сообщение
Но ведь и вы понимаете, почему так делать не нужно
я не понимаю, почему так делать не нужно.

мне не понятно почему в 15 году не нужно делать то,
что в 17 году станет официально законным.
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,272
Завершенные тесты: 3
15.08.2015, 18:07 #19
hoggy, пожалуй, я несколько нервно отношусь к собственным реализациям того, чего по стандарту пока не предусмотрено. Конечно, для своего проекта так делать никто не мешает, да и если чуть постараться и сделать поудобней индексирование, вполне все будет прекрасно. Код должен быть простым и понятным, хотя это уже зависит от условий работы.
hoggy
6538 / 2718 / 470
Регистрация: 15.11.2014
Сообщений: 5,998
Завершенные тесты: 1
15.08.2015, 18:18 #20
Цитата Сообщение от tnk500 Посмотреть сообщение
пожалуй, я несколько нервно отношусь к собственным реализациям того, чего по стандарту пока не предусмотрено.
стандартом предусмотрена возможность указать собственную функцию удаления,
и получения указателя на начало данных.

это не есть "велосипед".
мы ведь проворачиваем подобное используя стандартное апи.
ct0r
Игогошка!
1770 / 672 / 42
Регистрация: 19.08.2012
Сообщений: 1,284
Завершенные тесты: 1
15.08.2015, 18:19 #21
Цитата Сообщение от tnk500 Посмотреть сообщение
Но я полагаю, вы решили написать здесь чтобы помочь новичку в разъяснении некоторых моментов насчет текущего положения умных указателей в языке, а не для того чтобы показать, что вы можете, так ведь?
Нет, это было адресовано именно вам. Вдруг вы не знали. Кстати проблема shared_ptr относительно массивов сейчас скорее не в том, что нет оператора индексации (для которого есть нормальный workaround), а в том, что для него есть dynamic_pointer_cast, - это потенциальная дырка, потому что оно имеет смысл только для одиночных объектов.
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,272
Завершенные тесты: 3
15.08.2015, 18:22 #22
Ладно, сдаюсь, если так можно выразиться :D
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2015, 18:22
Привет! Вот еще темы с ответами:

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

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

Как выделяется память на стеке и на куче? Когда нужна ручная очистка? - C++
Всем здрасьте. //1 char s = 's'; //2 char* ss = new char; Во втором случае компилятор выделяет участок памяти, потом мне же её...

Умные указатели на структуру с шаблоном - C++
#pragma once #include <vector> #include <memory> using namespace std; template <class T> struct Selem ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.08.2015, 18:22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru