Mikle
> Я не очень понял, что вы обсуждаете, не знаю паскаля.
Даже если ты его знаешь, то тоже не совсем понятно зачем его обсуждать сейчас.
=A=L=X=
> это предложение на дурачка что ли?
Не перевирай мои слова, я не обещал просто. Я лишь показал возможность, но просто не выйдет.
Mikle
> Так я и имею ввиду именно безопасную ссылку,
Такого в плюсы не завезли. Ссылка также уплывёт как и указатель.
Ghost2
> В Си нет ссылок.
Помню я долго немог понять отчего код со ссылками не компилился. А оказывается я компилил турбо си а не плюсовым компилятором.
Пропустили отпразновать 20-летие треда - давайте хоть 300-ю страницу отпразднуем!
function b(var a: string); // это передача параметра по ссылке. Безопасная: нет способа передать nil.
type PString = ^string; // указатель на указатель, тащемто
function b(a: PString); // технически - абсолютно то же, что первый вариант, но в ногу себе стрелять *можно*.
В аду заготовлен особый котёл для тех, кто при трансляции хедеров WinAPI делал из ссылочных типов var параметры: механически - те же сова и пень, но nil-то передать нельзя!
У меня после делфей проблема в том, что я не различаю ссылок и указателей. Потому что там есть или значения или указатели. Строки это указатели + ARC + CopyOnWrite. Дин. массивы это указатели + ARC. К сожалению подсчет ссылок можно порушить довольно легко. Объекты это всегда куча и всегда указатели на кучу. ARC к объектам можно прикрутить через InterfacedObject. Структуры могут быть как в куче так и на стеке.
Кстати помимо конкатенации строк на уровне языка такое же завезли и для массивов:
type TGenerator<T> = class class function GetDefaultValues(const Count:uint32):TArray<T>; end; class function TGenerator<T>.GetDefaultValues(const Count: uint32): TArray<T>; begin Result := nil; for var i:uint32:=1 to Count do Result := Result + [Default(T)]; end; procedure TMainForm.CalcClick(Sender: TObject); var arr : TArray<int16>; begin arr := [0,1,2] + TGenerator<int16>.GetDefaultValues(5); // add 8 items arr := arr + [Default(int16)]; end;
Сдохни Дельфи ... Трататата :)
innuendo
Сегодня какой-то знаменательный день?
Cheb
> В аду заготовлен особый котёл для тех, кто при трансляции хедеров WinAPI делал из
> ссылочных типов var параметры: механически - те же сова и пень, но nil-то
> передать нельзя!
Держи костыль:
b(^( PString)nil);
Имбирная Ведьмочка
Первый раз увидел эту тему
innuendo
> увидел эту тему
Ну и зачем ты это сделал? Верни как было.
Качнул C++Builder - деградировали в хлам, если 20 лет назад это был целостный продукт то сейчас это просто куча какого то хлама в виде VCL и FireMonkey которые не дружат друг с другом. Даже HelloWorld чувствуется что с какой то невероятной тяжестью собирается. Но зато теперь их маркетинг долбит скидками на почту.
Тема в архиве.