我有一个指向一组对的指针-pair(K,V)* myPairs-并且有问题的实例带有(string,Set(string)),其中Set是一个二进制搜索树类。我正在尝试创建一个使myPairs大小增加一倍的函数,所以我:
问题是删除myPairs还会调用关联Set的析构函数,但我仍然想访问该数据。我如何避免这种情况??
答案 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)
如果数组本身丢失,则无法访问数组的元素!
创建数组时,所有元素都存储在分配给数组本身的内存中。除非您为它们明确分配内存,否则数据(在这种情况下,就是您的对象)将与数组一起被破坏。
如何修复?:动态。 使用堆为您提供帮助。动态创建数组。
原因是,除非您明确地命令它,否则不会在堆内存中创建的对象与指针一起被破坏。
您现在可以删除指针,并且数组仍保留在存储中。