У меня есть большой массив указателей вроде:
int *m_Data[1000];
Во время разрушения, должен ли я всегда идти на элемент мудро или есть лучший способ?
for(int i = 0; i<1000; i++)
delete m_Data[i];
int *m_Data[1000];
представляет собой массив из 1000
указателей на int
с автоматическим временем хранения.
Вам нужно вызвать delete
для каждого new
и delete[]
для каждого new[]
, то есть:
for(int i = 0; i<1000; i++)
delete m_Data[i];
является правильным, только если вы ранее делали что-то вроде:
for(int i = 0; i<1000; i++)
m_Data[i] = new int;
"Есть ли лучший способ?" - Да:
std::vector<int> m_data(1000);
в этом случае память, в которой находятся элементы, будет автоматически освобождена, когда объект будет разрушен (при необходимости для каждого элемента будет вызываться соответствующий деструктор).
Вы можете использовать интеллектуальный указатель (например, std::unique_ptr
) вместо необработанных указателей и не беспокоиться о ручном удалении:
std::unique_ptr<int> m_Data[1000];
Может быть, вы можете сделать что-то вроде:
int* m_Data = new int[1000];
// ...
delete [] m_Data;
Или:
int m_Data[1000]; // Why to allocate each element dynamically ?
В этом случае вам не нужно удалять какой-либо элемент.
Но если вам нужно динамически выделять каждый элемент один за другим:
int *m_Data[1000];
for( int i = 0; i < 1000; i++ )
m_Data[i] = new int;
// ...
for( int i = 0; i < 1000; i++ )
delete m_Data[i]; // To need to deallocate each element.
Почему бы вам не использовать контейнер типа std::vector
?
std::vector<int> m_Data(1000);