这可能是一个愚蠢的问题,但无论如何我都要问它:
假设您有一个指针:Object* pointer 指向动态分配的对象.
class PointClass
{
Array<Object*> m_array1;
Array<Object*> m_array2;
void Delete1()
{
for (int i = 0; i < m_array1.Length; i++)
{
delete m_array1[i];
}
}
void Delete2()
{
for (int i = 0; i < m_array2.Length; i++)
{
delete m_array2[i];
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,你把指针放在里面m_array1和里面m_array2.
当您尝试删除数组时,在其中一个数组中,您将有一个指向已释放空间的指针,因此您无法再次删除它!
我不能在删除后将指针指定为NULL,因为它不会影响另一个数组中的指针.
你会如何解决它?
最简单的方法是使用引用计数指针,就像boost :: smart_ptrs中可用的那样.
否则,您需要将所有者分配给指针 - 您需要决定哪个类负责分配/删除该特定指针.如果由于某种原因你决定应该是这个类,那么你可以通过在枚举它们之前添加指向集合的所有指针来从数组中删除重复项.