Войти
ФлеймФорумПрограммирование

Язык D (41 стр)

Страницы: 140 41 42 4345 Следующая »
#600
15:35, 11 янв. 2015

я чета эту бредятену на счет каста то же не понял )
подумал что за бред в D )
но если в D есть нормальный способ взять адрес
то почему тогда компилируется код с кастами
и тем более не падает в рантайме для меня вообще загадка )


#601
15:38, 11 янв. 2015

Zefick
Что такое &c1 в твоем случае? Если c1 это переменная на стеке, которая ссылается на объект в куче, то &c1 будет указателем на эту переменную на стеке, и этот указатель станет невалидным, при выходе из функции? Или не так?

#602
15:39, 11 янв. 2015

ud1
с какого перепуга c1 переменная на стеке, если ты ее инициализируешь через new?

#603
15:40, 11 янв. 2015

Мне в D вообще не понятно, что такое ссылка. Вот скажем в жаве все понятно, там везде ссылки, а взять адрес у них физически не возможно. Тут же ссылка, у которой можно взять адрес, которую можно скастить к указателю, что это за сущности такие вообще не понятно.

#604
15:41, 11 янв. 2015

cNoNim
Ну мне кажется, что c1 это переменная на стеке, в которой хранится ссылка на объект в куче.

#605
15:43, 11 янв. 2015

ud1
я немного не понимаю, твое понятие "переменная на стеке"
какого типа переменная?

#606
15:46, 11 янв. 2015

На самом деле это легко проверяется: http://dpaste.dzfl.pl/3da703a64f62
c1 и c2 ссылкаются на один и тот же объект, а &c1 и &c2 разные, следовательно это адреса не обхекта, а переменной на стеке ссылающейся на объект.
Итого Zefick, твой код не годится, твоим rb деревом нельзя будет пользоваться после выхода из метода, в нем будут указатели на удаленные перемнные, мне же надо, там долговременно хранить данные.

#607
15:47, 11 янв. 2015

cNoNim
> какого типа переменная?
Указатель на ссылку на объект видимо.

#608
15:49, 11 янв. 2015

ud1
> На самом деле это легко проверяется: http://dpaste.dzfl.pl/3da703a64f62
я в самом деле немного не понимаю что там происходит, поэтому оставим это тем кто шарит
может там указатель со счетчиком ссылок )

#609
15:54, 11 янв. 2015

ud1
> Если c1 это переменная на стеке, которая ссылается на объект в куче, то &c1
> будет указателем на эту переменную на стеке, и этот указатель станет
> невалидным, при выходе из функции? Или не так?
  Насколько я успел понять за десять минут гугления и экспериментов с компилятором - классы всегда создаются только на куче с помощью new, доступны через ссылки и управляются сборщиком мусора, а структуры - только на стеке. Собственно, как в C#. Вот только не сломается ли этот механизм сборки при получении указателя на ссылку после выхода из функции я не знаю.

#610
16:12, 11 янв. 2015

ud1
> c1 и c2 ссылкаются на один и тот же объект, а &c1 и &c2 разные, следовательно
> это адреса не обхекта, а переменной на стеке ссылающейся на объект.
  Да, это адреса ссылок на объекты в куче, лежащих на стеке, какие проблемы? :) В качестве доказательства скажу что адреса всегда отстоят на 4 байта независимо от размера класса, то есть адресами объектов на стеке они уже быть не могут.

#611
16:12, 11 янв. 2015

Вот у меня получилось возможно сделать rb-tree с указателями на объект класса: http://dpaste.dzfl.pl/9629795009bd
Но работать через void * и касты, это полное убожество.

#612
16:14, 11 янв. 2015

Zefick
> В качестве доказательства скажу что адреса всегда отстоят на 4 байта независимо
> от размера класса, то есть адресами объектов на стеке они уже быть не могут.
разность между 7FBFCA5A78 и 7FBFCA5A80 равно 8

#613
16:19, 11 янв. 2015

Включаем телепатию
Раз http://dpaste.dzfl.pl/bd69a67dcb68
Два http://dpaste.dzfl.pl/809e026f2aed
Этого ТС хотел?

#614
16:21, 11 янв. 2015

Hardcode
Да, так норм.

Страницы: 140 41 42 4345 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.