• jack128_ (06.09.08 14:33) [180]
    хм.  Да, ничего хорошего..
    ну да ладно, и в таком виде нормально выглядит..
  • oxffff © (06.09.08 16:43) [181]

    > jack128_   (06.09.08 14:33) [180]


    Я бы так не сказал. В его примере дополнительно создается два объекта кучи.
  • jack128_ (06.09.08 16:58) [182]

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

    Ну дополнительных - только один объект создается. Во вторых - а что предлагаешь ты??  Внедрить объекты на стеке (или деструкторы у рекордов) в язык??  И так много новоодений..
  • jack128_ (06.09.08 16:59) [183]

    > новоодений

    нововведений
  • oxffff © (07.09.08 11:33) [184]

    > 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.

    Так что это не нововведения. :)
  • oxffff © (07.09.08 11:52) [185]

    > Так что это не нововведения. :)


    А скорее старовведения.
  • jack128_ (07.09.08 15:25) [186]

    > Обертка анонимного метода с захватом AValue

    в данной конкретной реализации смартпоинтера - да, два объекта.  Но мона реализовать интерфейс, чтоб он явно уничтожал объект, а не выполнял какую то неизвестную фунцию, тогда будет только один объект.

    Вобще они конечно зря смарт поинтеры в этот пример присобачили. Сила в примера в том, что мы может вообще что угодно сделать при выходе за scope.  Смарт поинтер конечно самый полезный пример, но не единственный...


    > Все они есть Delphi.NET.
    >
    > Так что это не нововведения. :)

    ну мало ли что есть в .NET'е... давай еще скажем, что в delphi for win сборку мусора ввести - раз плюнуть и это никакое не нововедение будет...
  • oxffff © (07.09.08 16:02) [187]

    > ну мало ли что есть в .NET'е... давай еще скажем, что в
    > delphi for win сборку мусора ввести - раз плюнуть и это
    > никакое не нововедение будет...


    :)

    см.

    http://www.delphi.org/tag/garbage-collection/

    скачать здесь
    http://cc.codegear.com/Item/21646
  • jack128_ (07.09.08 16:19) [188]

    > http://www.delphi.org/tag/garbage-collection/

    эм.. на слух английским только по глубокой пьяни владею. :-)


    > http://cc.codegear.com/Item/21646

    не..  щас я готов открывать приплюснутые исходники. А вот из дельфиских:

    function Gc_FreeMem(p: Pointer): Integer;
    begin
     // do nothing
     Result := 0;
    end;

    Это уже радует.
  • oxffff © (07.09.08 16:58) [189]

    > эм.. на слух английским только по глубокой пьяни владею.
    >  :-)


    Мне легче я еще под градусом со вчерашнего. :)
  • guav © (07.09.08 17:21) [190]
    > [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);

  • jack128_ (07.09.08 19:19) [191]

    > неправильно, временный объект разрушится при ;

    а вот в дельфи - smart pointer разрушится только при выходе из процедуры
  • guav © (07.09.08 20:16) [192]

    > а вот в дельфи - smart pointer разрушится только при выходе
    > из процедуры

    а даже если ведёт себя как локальная переменная, можно сломать:
    1. циклом, тогда объект последующей итерации будет создаваться на месте пердыдущего.
    2. попыткой использовать после выхода из процедуры.

    Вот смотри на аналогию: PChar это указатель на объект, а AnsiString - смарт-поинтер. Приведение AnsiString к PChar - олько явное.
  • pasha_golub © (09.09.08 09:03) [193]
    Ребят, а у меня вот вопрос. Если имеем С функцию экспортируемую из некой ДЛЛ, например,

           int return_int(const char *somename);



    То ранее я ее определял как
    Treturn_int = function(somename: PChar): Integer; cdecl;



    В случае с Тибуроном это остается в силе? Или следует менять на PAnsiChar или того хуже TBytes?

    Если последнее, то каким макаром мне передать функции данные в кодировке UTF8? Ведь PChar у нас будет хранить UTF16, вроде как... С этим TEncoding голова пухнет.
  • jack128_ (09.09.08 10:28) [194]

    > Или следует менять на PAnsiChar

    конечно следует менять.
    PChar - теперь эквивалентен PWideChar
  • clickmaker © (09.09.08 10:35) [195]
    > C := TMyClass<Integer>.Create.Free;
    > КАк так?

    ну передумал создавать - чего непонятного?
  • pasha_golub © (09.09.08 12:39) [196]

    > jack128_   (09.09.08 10:28) [194]

    Хорошо, получится что это теперь
    Treturn_int = function(somename: PAnsiChar): Integer; cdecl;



    А как мне туда запихнуть содержимое строки? Чего-нибудь в таком роде:

    var S: string; //UNT16
    begin
    ..
     i := return_int(PAnsiChar(UnicodeToUTF8(S));
    ...
    end;



    Вообщем, как-то я не могу сложить разум в кучу по этому поводу. Опять же сколько надо терминирующих нулей вопрос. Ранее один впулил и доволен. Теперича, я так понимаю, два надобно?
  • KilkennyCat © (09.09.08 12:40) [197]

    > clickmaker ©  

    а ты не получал еще диск с 2009?
  • clickmaker © (09.09.08 12:44) [198]
    > [197] KilkennyCat ©   (09.09.08 12:40)

    не-а
    я с дельфи почти не работаю. Так, шабашки мелкие на 5-ке в основном
  • KilkennyCat © (09.09.08 12:50) [199]

    > clickmaker ©   (09.09.08 12:44) [198]

    понятно... ладно, буду ждать октября...
Есть новые Нет новых   [134442   +15][b:0.001][p:0.001]