我有大量的指针,如:
int *m_Data[1000];
在毁灭期间,我应该总是以元素为主,还是有更好的方法?
for(int i = 0; i<1000; i++)
delete m_Data[i];
答案 0 :(得分:3)
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);
在这种情况下,当对象被破坏时,将自动释放元素所在的内存(如果需要,将为每个元素调用适当的析构函数)。
答案 1 :(得分:3)
您可以使用智能指针(例如std::unique_ptr
)而不是原始指针,而不用担心手动删除:
std::unique_ptr<int> m_Data[1000];
答案 2 :(得分:0)
也许你可以这样做:
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);