Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> освобождение памяти 
V
    Опции темы
17dufa
Дата 15.1.2010, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



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

CTapMex, если выделять динамически память - то прячьте ее в RAII (std::auto_ptr, boost::shared_ptr и тп) *Мейерс правило 13 из "55 советов"
PM MAIL   Вверх
artsb
Дата 15.1.2010, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(17dufa @  15.1.2010,  14:35 Найти цитируемый пост)
а почему собственно амперсант не нужен? он позволяет модифицировать Name из вызывающей функции и вызывающая функция уже и удаляет эту память. 

Так там и &, и * сразу.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
17dufa
Дата 15.1.2010, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



artsb, и почему это Вас так пугает? именно это позволяет изменить Name в вызывающей функции и соответственно иметь в вызывающей функции доступ к считанному значению, а в последствии удалить память опять же в рамках вызывающей функции.
PM MAIL   Вверх
CTapMex
Дата 15.1.2010, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 20.2.2007

Репутация: нет
Всего: нет



17dufa
про RAII взял на заметку. сейчас переделывать все не резон. да и надо поизучать
PM MAIL   Вверх
artsb
Дата 15.1.2010, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



А вы понимаете, что * (указатели) и & (ссылки) это разные вещи? Зачем делать такую ядерную смесь? Удивительно, как оно вообще скомпилилось.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
17dufa
Дата 15.1.2010, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



artsb, я-то понимаю, более того вполне понимаю что ссылка на указатель имеет право на жизнь согласно стандарту и компиляторам. зачем делать ядерную смесь - это кому какие предпочтения, кого-то двойные указатели пугают, Вас вот похоже ссылка на указатель в ступор вводит smile 
PM MAIL   Вверх
artsb
Дата 15.1.2010, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Всё. Я вас понял  smile 


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
CTapMex
Дата 15.1.2010, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 20.2.2007

Репутация: нет
Всего: нет



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

другой вопрос разумно ли так делать? а почему нет? не всегда есть возможность поменять функцию, как сделал ты выше. т.е. если надо передать 2 указателя и в них записать что надо
PM MAIL   Вверх
17dufa
Дата 15.1.2010, 15:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



CTapMex, так делать можно и работать оно будет. а можно взять от указателя адрес и в функцию передать двойной указатель:
Код

....
char * name;
put(&name);
...
delete[] name;
...
char * put(char ** ptr)
{
   *ptr = new char[100];
   strcpy(*ptr, "some value");
   return *ptr;
}

примерно так будет выглядеть Ваш код, если ссылку заменить двойным указателем.

по мне - разница чисто синтаксическая.
PM MAIL   Вверх
artsb
Дата 15.1.2010, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(CTapMex @  15.1.2010,  15:35 Найти цитируемый пост)
другой вопрос разумно ли так делать? а почему нет? не всегда есть возможность поменять функцию, как сделал ты выше. т.е. если надо передать 2 указателя и в них записать что надо 

Пользуйтесь. Как сказал 17dufa, всё будет работать. Я просто изначально не совсем понял что вы делали  smile 


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0809 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.