powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / куда девается значение переменной
4 сообщений из 4, страница 1 из 1
куда девается значение переменной
    #34697323
asking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просьба помочь восполнить некоторые пробелы в базовых знаниях...
Есть функция вида:
Код: plaintext
1.
2.
3.
4.
5.
void getData(std::auto_ptr<MyClass> pMyClass)
{
     pMyClass->someFunction();
     return;
}

Где-то мы ее вызываем
Код: plaintext
getData(pMyClassVar);

При этом в некоторых случаях (но не всегда) при использовании подобных конструкций до getData имеем нормальное значение pMyClassVar, а при выходе в pMyClassVar получаем 0.
Исправляется так
Код: plaintext
1.
void getData(const std::auto_ptr<MyClass> &pMyClass)
то есть объявляем указатель константным...
Но мне все же не понятно, почему возможно изменение переменной pMyClassVar в первом варианте? Что при этом происходит?
...
Рейтинг: 0 / 0
куда девается значение переменной
    #34697358
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Передвай auto_ptr по ссылке и все будет нормально.

Дело в том, что смартпоинтеры auto_ptr не разделяет объекты между собой. Если ты передашь auto_ptr в функцию по значению, то auto_ptr передаст свой объект в функцию, а сам (который внешний) освободится от него. Когда произойдет выход из функции, локальный auto_ptr будет удаляться и удалит объект который в себе хранит.

Еще вариант - использовать интеллектуальные указатели, разделяющие объект. Например, boost::shared_ptr<class>.
...
Рейтинг: 0 / 0
куда девается значение переменной
    #34697602
asking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во, точно!
Из MSDN
Код: plaintext
It transfers ownership if its stored value is assigned to another object
То есть выходит, на один объект в памяти я могу в один момент времени иметь только один корректный указатель типа auto_ptr?
...
Рейтинг: 0 / 0
куда девается значение переменной
    #34697613
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
askingВо, точно!
Из MSDN
Код: plaintext
It transfers ownership if its stored value is assigned to another object
То есть выходит, на один объект в памяти я могу в один момент времени иметь только один корректный указатель типа auto_ptr?

Можешь, конечно, один объект раздать разным auto_ptr, но так поступать не стоит.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / куда девается значение переменной
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]