Автоматическая переменная.
От: Аноним  
Дата: 17.10.04 08:59
Оценка:
Допустим, есть конструкция:

fun(*(GetPointer()));

, где GetPointer создаёт какую-то динамическую переменную и возвращает указатель на неё, а fun принимает объект по ссылке.
Будет ли она уничтожена и когда?

Или прийдётся делать что-то типа:

C* p = GetPointer();
fun(*p);
delete p;
Re: Автоматическая переменная.
От: Аноним  
Дата: 17.10.04 09:46
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Допустим, есть конструкция:


А>
А>fun(*(GetPointer()));
А>

А>, где GetPointer создаёт какую-то динамическую переменную и возвращает указатель на неё, а fun принимает объект по ссылке.
А>Будет ли она уничтожена и когда?

А>Или прийдётся делать что-то типа:


А>
А>C* p = GetPointer();
А>fun(*p);
А>delete p;
А>


Именно так и надо. Но еще лучще пользоваться умными указателем,
который сам позаботится об удалении объекта.
Re: Автоматическая переменная.
От: _nn_ www.nemerleweb.com
Дата: 17.10.04 09:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Допустим, есть конструкция:


А>
А>fun(*(GetPointer()));
А>

А>, где GetPointer создаёт какую-то динамическую переменную и возвращает указатель на неё, а fun принимает объект по ссылке.
А>Будет ли она уничтожена и когда?

А>Или прийдётся делать что-то типа:


А>
А>C* p = GetPointer();
А>fun(*p);
А>delete p;
А>


Если известно что память выделилась через new, то так.
А если неизвестно через что выделилась (malloc, new[], и т.п.) то можно нарваться на ошибки.
Поэтому правильней всего будет воспользоваться умным указателем, который сам корректно освободит память.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Автоматическая переменная.
От: jazzer Россия Skype: enerjazzer
Дата: 17.10.04 17:57
Оценка: 2 (2)
Здравствуйте, Аноним, Вы писали:

А>Допустим, есть конструкция:


А>
А>fun(*(GetPointer()));
А>

А>, где GetPointer создаёт какую-то динамическую переменную и возвращает указатель на неё, а fun принимает объект по ссылке.
А>Будет ли она уничтожена и когда?

А>Или прийдётся делать что-то типа:


А>
А>C* p = GetPointer();
А>fun(*p);
А>delete p;
А>


Можно так:
fun(*std::auto_ptr<C>(GetPointer()).get());
"какая-то динамическая переменная" уничтожится автоматически после того, как отработает функция.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.