Допустим, есть конструкция:
fun(*(GetPointer()));
, где GetPointer создаёт какую-то динамическую переменную и возвращает указатель на неё, а fun принимает объект по ссылке.
Будет ли она уничтожена и когда?
Или прийдётся делать что-то типа:
C* p = GetPointer();
fun(*p);
delete p;
Здравствуйте, Аноним, Вы писали:
А>Допустим, есть конструкция:
А>А>fun(*(GetPointer()));
А>
А>, где GetPointer создаёт какую-то динамическую переменную и возвращает указатель на неё, а fun принимает объект по ссылке.
А>Будет ли она уничтожена и когда?
А>Или прийдётся делать что-то типа:
А>А>C* p = GetPointer();
А>fun(*p);
А>delete p;
А>
Именно так и надо. Но еще лучще пользоваться умными указателем,
который сам позаботится об удалении объекта.
Здравствуйте, Аноним, Вы писали:
А>Допустим, есть конструкция:
А>А>fun(*(GetPointer()));
А>
А>, где GetPointer создаёт какую-то динамическую переменную и возвращает указатель на неё, а fun принимает объект по ссылке.
А>Будет ли она уничтожена и когда?
А>Или прийдётся делать что-то типа:
А>А>C* p = GetPointer();
А>fun(*p);
А>delete p;
А>
Если известно что память выделилась через new, то так.
А если неизвестно через что выделилась (malloc, new[], и т.п.) то можно нарваться на ошибки.
Поэтому правильней всего будет воспользоваться умным указателем, который сам корректно освободит память.
Здравствуйте, Аноним, Вы писали:
А>Допустим, есть конструкция:
А>А>fun(*(GetPointer()));
А>
А>, где GetPointer создаёт какую-то динамическую переменную и возвращает указатель на неё, а fun принимает объект по ссылке.
А>Будет ли она уничтожена и когда?
А>Или прийдётся делать что-то типа:
А>А>C* p = GetPointer();
А>fun(*p);
А>delete p;
А>
Можно так:
fun(*std::auto_ptr<C>(GetPointer()).get());
"какая-то динамическая переменная" уничтожится автоматически после того, как отработает функция.