1. C++ / Говнокод #3215

    +960

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    // Encode() takes in reference to data. We now pass in reference to data instead of the
    // entire data object to Encode() as it was causing memory leak(with the data object copy
    // not getting deleted.
    
      Data &tempData = *data;
      Data::Encode(tempData, &encodedRequest, requestSize, 0);

    Перевод:
    Encode() принимает ссылку на data. Давайте передадим туда ссылку,
    а то раньше мы передавали объект целиком, и это приводило к утечкам памяти (копия объекта не удалялась).


    Здесь впору процитировать "Бойцовский Клуб":
    -А в какой Вы фирме работаете?
    -В крупной...

    Запостил: belca, 13 Мая 2010

    Комментарии (13) RSS

    • В чем говно?
      Раньше копия не удалялась, сейчас копии нет, объект один, он удаляется, все нормально, leaka нет.
      Причем тут цитата?
      Да и сама цитата звучит немного по-другому
      Там была не фирма, а компания.
      И не крупной, а одной из крупнейших.
      Если я не прав - смело минусуйте.
      Ответить
      • Тогда объясните, какая копия не удалялась? Та, которая была на стеке (и которую передавали "целиком" т.е. по значению)?
        (А ведь и правда, в одной из крупейших :))
        Ответить
        • судя по коментарию именно та
          >>>которую передавали "целиком"
          Ответить
          • или я чего то не пойму и leaka совсем не было,
            тогда какой смысл этого вообще?
            Ответить
    • Вместо "Давайте передадим туда ссылку, ..." будет
      "Теперь передается ссылка, вместо объекта целиком, что приводило к утечкам памяти (копия объекта не удалялась)." простите, не сдержался
      Ответить
    • Я так понимаю, что сигнатура функции не менялась, а в качестве первого параметра передавалось *data. Если так, то ГК имеет место быть.
      Ответить
      • а в чем могла быть исходная проблема при любой сигнатуре? разве что деструктор неправильно написан.
        Ответить
        • Если сначала было
          Data::Encode( *data, &encodedRequest, requestSize, 0);

          а потом стало
          Data &tempData = *data;
          Data::Encode(tempData, &encodedRequest, requestSize, 0);
          .
          То ничего не изменилось с точки зрения работы Encode().
          Вообще, проблему ГК в первую очередь должен знать тот, кто его публикует :))
          Ответить

    Добавить комментарий