如何在不删除对象本身的情况下删除指向对象数组的指针? C ++

时间:2020-04-01 22:17:18

标签: c++ pointers binary-search-tree destructor std-pair

我有一个指向一组对的指针-pair(K,V)* myPairs-并且有问题的实例带有(string,Set(string)),其中Set是一个二进制搜索树类。我正在尝试创建一个使myPairs大小增加一倍的函数,所以我:

  • 创建newPairs并复制myPairs中的数据
  • 删除myPairs
  • 将myPairs设置为newPairs

问题是删除myPairs还会调用关联Set的析构函数,但我仍然想访问该数据。我如何避免这种情况??

2 个答案:

答案 0 :(得分:1)

如何在不删除对象本身的情况下删除指向对象数组的指针? C ++

你不知道。数组的元素是数组的一部分。没有办法解决。

如何避免这种情况?

使用另一个数据结构。如果需要调整数据结构的大小,并且需要在调整大小时使元素保持有效,则数组不是一种选择。基于节点的数据结构可以做到这一点。您需要一个集合,标准库附带// Does not start a transaction yet const trxProvider = knex.transactionProvider(); const books = [ {title: 'Canterbury Tales'}, {title: 'Moby Dick'}, {title: 'Hamlet'} ]; // Starts a transaction const trx = await trxProvider(); const ids = await trx('catalogues') .insert({name: 'Old Books'}, 'id') books.forEach((book) => book.catalogue_id = ids[0]); await trx('books').insert(books); // Reuses same transaction const sameTrx = await trxProvider(); const ids2 = await sameTrx('catalogues') .insert({name: 'New Books'}, 'id') books.forEach((book) => book.catalogue_id = ids2[0]); await sameTrx('books').insert(books); ,它恰好可以满足您的要求。

答案 1 :(得分:0)

如果数组本身丢失,则无法访问数组的元素!

创建数组时,所有元素都存储在分配给数组本身的内存中。除非您为它们明确分配内存,否则数据(在这种情况下,就是您的对象)将与数组一起被破坏。

如何修复?:动态。 使用堆为您提供帮助。动态创建数组。

原因是,除非您明确地命令它,否则不会在堆内存中创建的对象与指针一起被破坏。

您现在可以删除指针,并且数组仍保留在存储中。