C++ 指针复制到另一个指针时的工作方式

C++ 指针复制到另一个指针时的工作方式,c++,pointers,delete-operator,C++,Pointers,Delete Operator,大家好 #include <bits/stdc++.h> using namespace std; int main() { int* ptr1 = new int; int* ptr2 = ptr1; delete ptr2; // Detroying ptr2 return 0; } #包括 使用名称空间std; int main() { int*ptr

大家好

#include <bits/stdc++.h> 
    using namespace std; 

    int main() 
    { 

        int* ptr1 = new int; 

        int* ptr2 = ptr1; 

        delete ptr2; // Detroying ptr2 

        return 0; 
    } 
#包括
使用名称空间std;
int main()
{ 
int*ptr1=新的int;
int*ptr2=ptr1;
删除ptr2;//删除ptr2
返回0;
} 
在上述情况下,ptr1使用的内存将被释放,或者仅ptr2将被销毁。 我还有一个疑问。我有一种树状结构,节点指向两个孩子(这些孩子有叶子节点,认为它是一棵大树)。如果我必须删除根节点的一个子节点,我是否需要删除孙子节点、孙子节点等的每个指针对象?
提前感谢?

将释放ptr2和ptr1指向的int。delete操作符释放指针指向的对象,而不是指针本身。(删除后指针仍保留,但现在它们是“悬空指针”,指向不再由您使用的内存)


至于删除树结构,是的,您需要递归地删除,一直到叶子。通常,这是在节点类的析构函数方法中完成的,非常简单(只需在每个直接子节点上调用delete,这将导致它们的析构函数方法执行并删除它们的每个子节点,依此类推)

此部分:

new int;
正在为
int
分配内存,该int将在以后被删除。该内存的位置是指针的值。可以有任意数量的指针指向该内存,所有指针的值都相同。当内存被删除时,指针的值仍然相同,您不应该取消引用指针,因为它们现在指向已删除的内存

#include <iostream>

int main() {
    int* ptr1 = new int;
    int* ptr2 = ptr1;

    // When I ran this the output was: 0x7fe835402a40 0x7fe835402a40
    std::cout << ptr1 << ' ' << ptr2 << std::endl;

    delete ptr1;

    // Output is still: 0x7fe835402a40 0x7fe835402a40
    std::cout << ptr1 << ' ' << ptr2 << std::endl;

    return 0;
}
#包括
int main(){
int*ptr1=新的int;
int*ptr2=ptr1;
//当我运行此命令时,输出为:0x7fe835402a40 0x7fe835402a40
标准::cout