C++ 如何在不删除对象本身的情况下删除指向对象数组的指针?C++;
我有一个指向一组对(pair(K,V)*myPairs)的指针,所讨论的实例是(string,set(string)),其中set是一个二叉搜索树类。我正在尝试创建一个将myPairs的大小加倍的函数,因此我:C++ 如何在不删除对象本身的情况下删除指向对象数组的指针?C++;,c++,pointers,binary-search-tree,destructor,std-pair,C++,Pointers,Binary Search Tree,Destructor,Std Pair,我有一个指向一组对(pair(K,V)*myPairs)的指针,所讨论的实例是(string,set(string)),其中set是一个二叉搜索树类。我正在尝试创建一个将myPairs的大小加倍的函数,因此我: 创建新对并复制myPairs中的数据 删除myPairs 将myPairs设置为newPairs 问题是删除myPairs也会调用关联集的析构函数,但我仍然希望访问该数据。我怎样才能避免这个 如何在不删除对象本身的情况下删除指向对象数组的指针?C++ 你没有。数组的元素是数组的一部分
- 创建新对并复制myPairs中的数据
- 删除myPairs
- 将myPairs设置为newPairs
std::set
如果阵列本身丢失,则无法访问阵列的元素
创建数组时,它的所有元素都存储在分配给数组本身的内存中。除非显式地为它们分配内存,否则数据(在本例中为对象)将与数组一起销毁
如何修复它?:动态化。
用堆来帮助你。动态创建阵列
原因是,在堆内存中创建的对象不会随指针一起销毁,除非您显式地命令它
您现在可以删除指针,但您的数组仍保留在存储器中。请说明问题所在(例如:调用原始对象的析构函数有什么问题)“我有一个指向一组对的指针…”-为什么?为什么不简单地使用
std::set
(或std::vector
)?这可能是set类的一个问题。从集合中删除移动/复制的内容不应影响新集合。复制步骤应为您解决此问题。确保您正确地观察到了错误。五个听起来比三个更适合这里。现在投票结束这个。没有一行代码。猜谜游戏毫无意义。