C ++ указывает на простой вопрос - PullRequest
0 голосов
/ 30 апреля 2010

Если в цикле есть следующие строки:

Type *unite = new Type(newSize); 

или

double *array= new double[anySize];

каково поведение в отношении памяти, если в ней нет операторов удаления? Он будет постоянно размещать объекты и массивы в разных местах памяти, и, следовательно, утечки памяти?

Ответы [ 3 ]

12 голосов
/ 30 апреля 2010

Да, будет. Это:

for (int i = 0; i < 10; ++i) 
{
  Type* unite = new Type(newSize);
}

выделит 10 объектов типа Type, все в разных местах. Ни один из них не будет освобожден, и в конце у вас не будет указателя ни на один из них. Вы потеряете 10 * sizeof(Type) байтов памяти.

Аналогично, это

for (int i = 0; i < 10; ++i) 
{
  double *array= new double[anySize];
}

будет по той же причине утекать 10 * anySize * sizeof(double) байт памяти.

1 голос
/ 30 апреля 2010

Да. Вы будете пропускать память на каждой итерации цикла. boost::scoped_ptr и boost::scoped_array предназначены для таких ситуаций.

1 голос
/ 30 апреля 2010

Это будет постоянно размещать объекты и массивы в разных местах памяти, и, следовательно, утечки памяти?

Предполагая, что вы имеете в виду это:

 for (;x;x)
 {
    double *ptr = new double[42];
 }

Тогда ответ - да, память просочилась.

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