我有大量的指针,例如:
int *m_Data[1000];
在破坏过程中,我应该始终保持元素明智还是有更好的方法?
for(int i = 0; i<1000; i++)
delete m_Data[i];
我有大量的指针,例如:
int *m_Data[1000];
在破坏过程中,我应该始终保持元素明智还是有更好的方法?
for(int i = 0; i<1000; i++)
delete m_Data[i];
您可以使用智能指针(例如std::unique_ptr
)而不是原始指针,而不必担心手动删除:
std::unique_ptr<int> m_Data[1000];
int *m_Data[1000];
1000
是一个指向s的指针数组,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);
在这种情况下,元素所在的内存将在对象被破坏时自动释放(如果需要,将为每个元素调用适当的析构函数)。
也许您可以执行以下操作:
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);