You*_*ufi 2 c++ arrays memory-management
我想知道是否有一种方法可以删除指针数组而不触及内存中的指向对象。
HashSet我正在为几天前实现的一个限制例程编写一个限制例程,因此当哈希表已满时,它会被另一个双倍大小的表替换。我使用指向对象的指针数组 ( User) 来表示哈希表,并且该数组本身是在我的类中动态声明的HashSet,因此可以在使用哈希函数将其所有内容复制到新表后将其删除。
所以基本上我需要:
User对象的指针从原始数组复制到应用哈希函数的新数组(它User从内存中获取对象,并使用表示用户名的字符串计算索引)。userContainer)中的指针替换为新数组(数组)的位置。问题是,如果我用来delete[] userContainer释放为其分配的内存,它还会删除内存中的每个对象,因此新创建的替换数组将指向内存中已释放的位置!
你所描述的听起来不太对。
假设您有 aclass A并且创建了一个 s 数组A:
A** array1 = new A*[32];
Run Code Online (Sandbox Code Playgroud)
然后填写:
for(int i = 0; i < 32; ++i)
array1[i] = new A();
Run Code Online (Sandbox Code Playgroud)
执行 adelete[] array1并不会释放 的元素array1。
所以这是安全的:
A** array1 = new A*[32];
for(int i = 0; i < 32; ++i)
array1[i] = new A();
A** arary2 = new A*[64];
for(i = 0; i < 32; ++i)
array2[i] = array1[i];
delete [] array1;
for(i = 0; i < 32; ++i)
// do something with array2[i]
Run Code Online (Sandbox Code Playgroud)