![]() 3219 / 1746 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
1 | ||||||
Интересное поведение нестатической функции класса, возвращающей свою статическую переменную09.12.2010, 10:34. Показов 822. Ответов 5
Метки нет Все метки)
(
В VS 2008 программа
In copy A i_ = 1 In copy A i_ = 2 In copy A i_ = 3 Для продолжения нажмите любую клавишу . . . Интересно, это стандартное поведение или косяк? Ведь функция get_i не статическая, т.е. по идее у каждого объекта она должна быть своя, и при первом вызове возвращать 1.
0
|
|
09.12.2010, 10:34 | |
Ответы с готовыми решениями:
5
Как создать статическую переменную в Паскале? Переменную, которая сохраняет значение, при выходе из функции Как в VB сделать статическую переменную класса?
|
![]() 5053 / 3114 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
|
|
09.12.2010, 12:54 | 2 |
Хм. Всё-таки в памяти имеется только одна копия функции get_i, а, значит, и только одна копия всех её данных. Получается, что имеется только один экземпляр её статической переменной i. Это всё только догадка, но по логике вещей так и должно быть.
0
|
Модератор
![]() ![]() ![]() ![]() 11658 / 7171 / 1704
Регистрация: 25.07.2009
Сообщений: 13,142
|
|
09.12.2010, 14:38 | 3 |
не, по-моему функция-то у каждого объекта своя, но все они кивают на один и тот же участок памяти, в котором собственно переменная и хранится... Она просто инициализируется несколько не полит-корректно, что создаёт иллюзию того, что каждый объект должен создавать "свою" статическую переменную, ну или как минимум обнулять её...
1
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
09.12.2010, 14:47 | 4 |
По-моему, функция всё-таки одна. Просто метод класса ещё неявно получает указатель на экземпляр, поэтому создаётся иллюзия, что функции разные.
Gcc, кстати, то же самое выдаёт.
0
|
![]() 3219 / 1746 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
09.12.2010, 16:03 [ТС] | 5 | |||||
Если это свойство справедливо, то можно им пользоваться для создания вектора, элементы которого знают свой индекс:
0
|
easybudda
|
09.12.2010, 16:13
Интересное поведение нестатической функции класса, возвращающей свою статическую переменную
#6
|
0
|
09.12.2010, 16:13 | |
Синтаксис объявления функции, возвращающей экземпляр класса Интересное поведение IAR USB интересное поведение Интересное поведение cin.getline(); Интересное поведение CListCtrl::InsertItem() Не удается подключить к приложению gtest и свою статическую либу VS 2010 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |