Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在不删除对象本身的情况下删除指向对象数组的指针?C++;_C++_Pointers_Binary Search Tree_Destructor_Std Pair - Fatal编程技术网

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

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++ 你没有。数组的元素是数组的一部分

我有一个指向一组对(pair(K,V)*myPairs)的指针,所讨论的实例是(string,set(string)),其中set是一个二叉搜索树类。我正在尝试创建一个将myPairs的大小加倍的函数,因此我:

  • 创建新对并复制myPairs中的数据
  • 删除myPairs
  • 将myPairs设置为newPairs
问题是删除myPairs也会调用关联集的析构函数,但我仍然希望访问该数据。我怎样才能避免这个

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

你没有。数组的元素是数组的一部分。这是没有办法的

我怎样才能避免这个

使用另一个数据结构。如果需要调整数据结构的大小,并且在调整其大小时需要元素保持有效,则数组不是选项。基于节点的数据结构可以做到这一点。您需要一个集合,标准库附带了满足您需求的
std::set

如果阵列本身丢失,则无法访问阵列的元素

创建数组时,它的所有元素都存储在分配给数组本身的内存中。除非显式地为它们分配内存,否则数据(在本例中为对象)将与数组一起销毁

如何修复它?:动态化。 用堆来帮助你。动态创建阵列

原因是,在堆内存中创建的对象不会随指针一起销毁,除非您显式地命令它


您现在可以删除指针,但您的数组仍保留在存储器中。

请说明问题所在(例如:调用原始对象的析构函数有什么问题)“我有一个指向一组对的指针…”-为什么?为什么不简单地使用
std::set
(或
std::vector
)?这可能是set类的一个问题。从集合中删除移动/复制的内容不应影响新集合。复制步骤应为您解决此问题。确保您正确地观察到了错误。五个听起来比三个更适合这里。现在投票结束这个。没有一行代码。猜谜游戏毫无意义。