А где утечка памяти?...
От: KBH  
Дата: 01.12.05 14:37
Оценка:
Объясните неразумному, а где утечка-то?

class Foo
{
public:
  Foo()
    :m_pBar(new Bar)
    ,m_pBaz(new Baz)
  {
  }

  ~Foo()
  {
    delete m_pBar;
    delete m_pBaz;
  }

private:
  Bar *m_pBar;
  Baz *m_pBaz;
};


Взято отсюда:
http://www.gamedev.ru/forum/?group=0&topic=21218&page=2
Re: А где утечка памяти?...
От: Greg Zubankov СССР  
Дата: 01.12.05 14:41
Оценка: 1 (1)
Здравствуйте, KBH, Вы писали:

KBH>Объясните неразумному, а где утечка-то?


KBH>
KBH>class Foo
KBH>{
KBH>public:
KBH>  Foo()
KBH>    :m_pBar(new Bar)
KBH>    ,m_pBaz(new Baz)
        ^^^^^^^
        будет, если при втором выделении памяти кинется исключение
        деструктор то не вызовется, т.к. объект еще не будет создан
KBH>  {
KBH>  }

KBH>  ~Foo()
KBH>  {
KBH>    delete m_pBar;
KBH>    delete m_pBaz;
KBH>  }

KBH>private:
KBH>  Bar *m_pBar;
KBH>  Baz *m_pBaz;
KBH>};
KBH>


KBH>Взято отсюда:

KBH>http://www.gamedev.ru/forum/?group=0&topic=21218&page=2
Re: А где утечка памяти?...
От: Bell Россия  
Дата: 01.12.05 14:41
Оценка: 1 (1)
Здравствуйте, KBH, Вы писали:

KBH>Объясните неразумному, а где утечка-то?


В исключении из конструктора Baz. Если это исключение произойдет, то деструктор Foo не будет вызван, и m_pBar повиснет в памяти.
Любите книгу — источник знаний (с) М.Горький
Re: А где утечка памяти?...
От: jazzer Россия Skype: enerjazzer
Дата: 01.12.05 14:42
Оценка: 1 (1)
Здравствуйте, KBH, Вы писали:

KBH>Объясните неразумному, а где утечка-то?


KBH>
KBH>class Foo
KBH>{
KBH>public:
KBH>  Foo()
KBH>    :m_pBar(new Bar)
KBH>    ,m_pBaz(new Baz)
KBH>  {
KBH>  }

KBH>  ~Foo()
KBH>  {
KBH>    delete m_pBar;
KBH>    delete m_pBaz;
KBH>  }

KBH>private:
KBH>  Bar *m_pBar;
KBH>  Baz *m_pBaz;
KBH>};
KBH>


KBH>Взято отсюда:

KBH>http://www.gamedev.ru/forum/?group=0&topic=21218&page=2

если бросит исключение конструктор Baz, то деструктор для Foo не позовется (потому что объект не создался), и память, выделенная new Bar, освобождена не будет.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: А где утечка памяти?...
От: KBH  
Дата: 01.12.05 14:47
Оценка:
Ага, понятно.
Re: А где утечка памяти?...
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 01.12.05 15:11
Оценка: 3 (2)
Здравствуйте, KBH, Вы писали:

KBH>Объясните неразумному, а где утечка-то?


За отсутствие запрещенных конструктора и оператора копирования — расстрел на месте
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: А где утечка памяти?...
От: Павел Кузнецов  
Дата: 01.12.05 15:11
Оценка: 1 (1)
KBH,

> Объясните неразумному, а где утечка-то?

>
> class Foo
> {
> public:
>   Foo()
>     :m_pBar(new Bar)
>     ,m_pBaz(new Baz)
>   {
>   }
>
>   ~Foo()
>   {
>     delete m_pBar;
>     delete m_pBaz;
>   }
>
> private:
>   Bar *m_pBar;
>   Baz *m_pBaz;
> };
>


Плюс, кроме потенциальной утечки памяти, описанной выше, присутствует потенциальное множественное удаление из-за возможности использования конструктора копирования и оператора присваивания по умолчанию.
Posted via RSDN NNTP Server 2.0
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: А где утечка памяти?...
От: KBH  
Дата: 01.12.05 15:14
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>За отсутствие запрещенных конструктора и оператора копирования — расстрел на месте


Гм, спасибо за совет.
Re[2]: А где утечка памяти?...
От: Bell Россия  
Дата: 01.12.05 15:14
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Плюс, кроме потенциальной утечки памяти, описанной выше, присутствует потенциальное множественное удаление из-за возможности использования конструктора копирования и оператора присваивания по умолчанию.


Да, слона-то и не приметили...
Любите книгу — источник знаний (с) М.Горький
Re[3]: А где утечка памяти?...
От: jazzer Россия Skype: enerjazzer
Дата: 01.12.05 16:14
Оценка: +1
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, Павел Кузнецов, Вы писали:


ПК>>Плюс, кроме потенциальной утечки памяти, описанной выше, присутствует потенциальное множественное удаление из-за возможности использования конструктора копирования и оператора присваивания по умолчанию.


B>Да, слона-то и не приметили...


Наоборот, он-то как раз в глаза и лез и мешал разглядеть утечку, мне, по крайней мере
Слишком сильный раздражитель
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.