删除指针数组而不删除内存中指向的对象?

You*_*ufi 2 c++ arrays memory-management

我想知道是否有一种方法可以删除指针数组而不触及内存中的指向对象。

HashSet我正在为几天前实现的一个限制例程编写一个限制例程,因此当哈希表已满时,它会被另一个双倍大小的表替换。我使用指向对象的指针数组 ( User) 来表示哈希表,并且该数组本身是在我的类中动态声明的HashSet,因此可以在使用哈希函数将其所有内容复制到新表后将其删除。

所以基本上我需要:

  1. 声明另一个表,其大小等于原始数组大小的两倍。
  2. 将每个指向User对象的指针从原始数组复制到应用哈希函数的新数组(它User从内存中获取对象,并使用表示用户名的字符串计算索引)。
  3. 将原始数组中的所有指针插入到新数组后,我必须释放为原始数组分配的内存,并将 HashSet 类(成员 private userContainer)中的指针替换为新数组(数组)的位置。

问题是,如果我用来delete[] userContainer释放为其分配的内存,它还会删除内存中的每个对象,因此新创建的替换数组将指向内存中已释放的位置!

ess*_*kar 5

你所描述的听起来不太对。
假设您有 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)