как освободить память в C ++ - PullRequest
1 голос
/ 30 октября 2010

У меня есть класс A, в котором я создаю объект класса B с именем bb.После создания объекта bb я запускаю исключение в коде класса A, которое перехватывается обработчиком исключений.Теперь мой вопрос, как освободить память объекта B в обработчике исключений?

Ответы [ 2 ]

1 голос
/ 30 октября 2010

Использование shared_ptr

struct B {...};

struct A {
  A() : bb(new B) {} // auto-deallocate
  boost::shared_ptr<B> bb;
}
0 голосов
/ 30 октября 2010

Если объект класса B является объектом-членом класса A (совокупный шаблон), то вам даже не нужно явно освобождать его, пока сам B является RAII-ed.С другой стороны, если это объект кучи (A динамически распределяет bb в куче), вам необходимо явно освободить его.Вы можете использовать boost :: scoped_ptr или boost :: shared_ptr (в зависимости от того, хотите ли вы, чтобы владение bb делилось с другими), чтобы сохранить владение объектом bb, чтобы он автоматически освобождался при удалении объекта класса А.

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