Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 29.10.2018, 12:46   #1
ezus
Форумчанин
 
Регистрация: 08.05.2009
Сообщений: 58
Репутация: 10
По умолчанию 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, 15:06   #2
_Bers
Профессионал
 
Регистрация: 16.12.2011
Адрес: Москва
Сообщений: 2,317
Репутация: 1138
По умолчанию

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

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

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

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

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

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

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

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, 12:01   #8
ezus
Форумчанин
 
Регистрация: 08.05.2009
Сообщений: 58
Репутация: 10
По умолчанию

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
возможно ли подменить рефер или вовсе почистить его перед тем как подгрузим виджет с другого сайта Predator199 JavaScript, Ajax 12 28.07.2016 16:20
Как почистить диск Е(вопрос от чайника) Markovichkiev Windows 4 13.04.2016 12: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


06:23.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.