C ++ идиома, чтобы избежать утечек памяти? - PullRequest
0 голосов
/ 06 июня 2009

В следующем коде возникает утечка памяти, если Info::addPart1() вызван несколько раз случайно:

typedef struct
{
}part1;

typedef struct
{
}part2;

class Info
{
    private:
    part1* _ptr1;
    part2* _ptr2;    

    public:
    Info()
    {
      _ptr1 = _ptr2 = NULL;
    }

    ~Info()
    {
      delete _ptr1; 
      delete _ptr2;
    }

    addPart1()
    {
       _ptr1 = new part1;         
    }

    addPart2()
    {
      _ptr2 = new part2;         
    }   
};


Info _wrapper;
_wrapper.addPart1();
_wrapper.addPart2();

Существует ли идиома C ++ для решения этой проблемы?

Я мог бы переписать addPart1 и addPart2 вот так, чтобы защитить MLK

addPart1()
{
  if(_ptr1 != NULL) delete _ptr1;
  _ptr1 = new part1;         
}

Это хорошее решение?

Ответы [ 11 ]

0 голосов
/ 06 июня 2009

Вариант 1: использовать Java:)

Вариант 2: использовать auto_ptr

std::auto_ptr<part1> _ptr1;
std::auto_ptr<part2> _ptr2;

public:
addPart1()
{
   _ptr1 = auto_ptr<part1>(new part1);
}

...

// no destructor is needed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...