Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2018, 11:46   #1
ezus
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 78
По умолчанию MS VS-2017 C++ MFC - Как почистить CPtrArray

Добрый день.

Запутался в 2-х соснах.

Есть код
Код:
int foo1( CPtrArray& arr )
{
   int nn = 11;
   for( int i=0: i<nn ; i++ )
   {
      CPtrArray* subarr = new CPtrArray();
      arr.Add(subarr );
   }
   return nn;
}

void foo()
{
   CPtrArray arr;  arr.SetSize(0,1);
   int nn = foo1(arr);
   ///.....///
}
При выходе из foo() массив arr будет уничтожен.
Вопрос: Будут ли выполнены delete на каждый элемент arr, или это должен сделать я?

Спасибо.
ezus вне форума Ответить с цитированием
Старый 29.10.2018, 14:06   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от ezus Посмотреть сообщение
При выходе из foo() массив arr будет уничтожен.
Вопрос: Будут ли выполнены delete на каждый элемент arr, или это должен сделать я?

умный CPtrArray сам позаботится о своих элементах.
_Bers вне форума Ответить с цитированием
Старый 29.10.2018, 15:41   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
умный CPtrArray сам позаботится о своих элементах
Одна беда - CPtrArray глупый.
Код:
CPtrArray::~CPtrArray()
{
	ASSERT_VALID(this);

	delete[] (BYTE*)m_pData;
}
waleri вне форума Ответить с цитированием
Старый 29.10.2018, 15:49   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

И об этом написано в документации, но кто ее читает...
p51x вне форума Ответить с цитированием
Старый 31.10.2018, 10:40   #5
ezus
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 78
По умолчанию

Спасибо.
Надо понимать, что чистить элементы массива я должен сам?
ezus вне форума Ответить с цитированием
Старый 31.10.2018, 10:41   #6
ezus
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 78
По умолчанию

Прошу прощение за опоздание с реакцией - мы вчера не работали.
ezus вне форума Ответить с цитированием
Старый 31.10.2018, 10:44   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

https://docs.microsoft.com/en-us/cpp...s?view=vs-2017

Цитата:
When a pointer array is deleted, or when its elements are removed, only the pointers are removed, not the entities they reference.
p51x вне форума Ответить с цитированием
Старый 31.10.2018, 11:01   #8
ezus
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 78
По умолчанию

Еще раз спасибо
ezus вне форума Ответить с цитированием
Старый 02.11.2018, 12:48   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Одна беда - CPtrArray глупый.
Код:
CPtrArray::~CPtrArray()
{
	ASSERT_VALID(this);

	delete[] (BYTE*)m_pData;
}
ну и в чем проблема?
_Bers вне форума Ответить с цитированием
Старый 03.11.2018, 00:15   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
ну и в чем проблема?
Изначальный вопрос перечитайте...
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
возможно ли подменить рефер или вовсе почистить его перед тем как подгрузим виджет с другого сайта Predator199 JavaScript, Ajax 12 28.07.2016 15:20
Как почистить диск Е(вопрос от чайника) Markovichkiev Windows 4 13.04.2016 11:14
Как почистить шаблон от мусора в коде. Tonchi HTML и CSS 3 19.03.2012 08:31
как почистить принтер RAVAL)) Компьютерное железо 3 27.06.2009 17:02
MFC CPtrArray ezus Visual C++ 2 10.05.2009 11:38