-
хм. Да, ничего хорошего.. ну да ладно, и в таком виде нормально выглядит..
-
> jack128_ (06.09.08 14:33) [180]
Я бы так не сказал. В его примере дополнительно создается два объекта кучи.
-
> Я бы так не сказал. В его примере дополнительно создается > два объекта кучи.
Ну дополнительных - только один объект создается. Во вторых - а что предлагаешь ты?? Внедрить объекты на стеке (или деструкторы у рекордов) в язык?? И так много новоодений..
-
> новоодений
нововведений
-
> jack128_ (06.09.08 16:58) [182] > > > Я бы так не сказал. В его примере дополнительно создается > > > два объекта кучи. > > Ну дополнительных - только один объект создается. Во вторых > - а что предлагаешь ты?? Внедрить объекты на стеке (или > деструкторы у рекордов) в язык?? И так много новоодений. > .
Объекта создается два. См. код
constructor TSmartPointer<T>.Create(const AValue: T); begin FValue := AValue; FLifetime := TLifetimeWatcher.Create(procedure begin AValue.Free; end); end;
Объекты
1.TLifetimeWatcher 2. Обертка анонимного метода с захватом AValue.
Нововведений? :)
Все они есть Delphi.NET.
Так что это не нововведения. :)
-
> Так что это не нововведения. :)
А скорее старовведения.
-
> Обертка анонимного метода с захватом AValue
в данной конкретной реализации смартпоинтера - да, два объекта. Но мона реализовать интерфейс, чтоб он явно уничтожал объект, а не выполнял какую то неизвестную фунцию, тогда будет только один объект.
Вобще они конечно зря смарт поинтеры в этот пример присобачили. Сила в примера в том, что мы может вообще что угодно сделать при выходе за scope. Смарт поинтер конечно самый полезный пример, но не единственный...
> Все они есть Delphi.NET. > > Так что это не нововведения. :)
ну мало ли что есть в .NET'е... давай еще скажем, что в delphi for win сборку мусора ввести - раз плюнуть и это никакое не нововедение будет...
-
-
-
> эм.. на слух английским только по глубокой пьяни владею. > :-)
Мне легче я еще под градусом со вчерашнего. :)
-
> [178] jack128_ (06.09.08 14:06)
Вот ещё вспомнил, почему неявно умный указатель не преобразуют в обычный: std::shared_ptr<someclass> get_some();
void use_some(someclass *);
неявное преобразование:
std::shared_ptr<someclass> p = get_some(); use_some(p);
someclass* p = get_some(); use_some(p);
get:
std::shared_ptr<someclass> p = get_some(); use_some(p.get());
someclass* p = get_some().get(); use_some(p);
-
> неправильно, временный объект разрушится при ;
а вот в дельфи - smart pointer разрушится только при выходе из процедуры
-
> а вот в дельфи - smart pointer разрушится только при выходе > из процедуры
а даже если ведёт себя как локальная переменная, можно сломать: 1. циклом, тогда объект последующей итерации будет создаваться на месте пердыдущего. 2. попыткой использовать после выхода из процедуры.
Вот смотри на аналогию: PChar это указатель на объект, а AnsiString - смарт-поинтер. Приведение AnsiString к PChar - олько явное.
-
Ребят, а у меня вот вопрос. Если имеем С функцию экспортируемую из некой ДЛЛ, например, int return_int(const char *somename);
То ранее я ее определял как Treturn_int = function(somename: PChar): Integer; cdecl; В случае с Тибуроном это остается в силе? Или следует менять на PAnsiChar или того хуже TBytes? Если последнее, то каким макаром мне передать функции данные в кодировке UTF8? Ведь PChar у нас будет хранить UTF16, вроде как... С этим TEncoding голова пухнет.
-
> Или следует менять на PAnsiChar
конечно следует менять. PChar - теперь эквивалентен PWideChar
-
> C := TMyClass<Integer>.Create.Free; > КАк так?
ну передумал создавать - чего непонятного?
-
> jack128_ (09.09.08 10:28) [194]
Хорошо, получится что это теперь Treturn_int = function(somename: PAnsiChar): Integer; cdecl; А как мне туда запихнуть содержимое строки? Чего-нибудь в таком роде: var S: string; begin
..
i := return_int(PAnsiChar(UnicodeToUTF8(S));
...
end; Вообщем, как-то я не могу сложить разум в кучу по этому поводу. Опять же сколько надо терминирующих нулей вопрос. Ранее один впулил и доволен. Теперича, я так понимаю, два надобно?
-
> clickmaker ©
а ты не получал еще диск с 2009?
-
> [197] KilkennyCat © (09.09.08 12:40)
не-а я с дельфи почти не работаю. Так, шабашки мелкие на 5-ке в основном
-
> clickmaker © (09.09.08 12:44) [198]
понятно... ладно, буду ждать октября...
|