清启牧 发表于 2021-5-8 16:07:29

c++指针赋值是深拷贝还是浅拷贝

用new开辟了一个空间,让指针a1指向这个空间,然后将a1赋值给b1指针。
这时候用delete删除a1,照理说开辟的空间应该被回收了,b1应该是野指针了。但是b1任然能够指向原开辟的空间,并取到空间中的数据。
指针赋值难道是浅拷贝?可是对比了指针的地址和内容,不应该出现上面说的这种情况啊。
求助大神解释一下,删除a1后,*b1的值仍然能取到3,是怎么回事。
int main()
{
    int *a1 = new int(3);
    cout << "a1 = " << a1 << endl;
    //cout << "*a1 = " << *a1 << endl;
    //cout << "&a1 = " << &a1 << endl;
    //cout << "&(*a1) = " << &(*a1) << endl;

    int *b1 = a1;
    cout << "b1 = " << b1 << endl;
    //cout << "*b1 = " << *b1 << endl;
    //cout << "&b1 = " << &b1 << endl;
    //cout << "&(*b1) = " << &(*b1) << endl;

    delete a1;
    a1 = nullptr;
    cout << "*b1 = " << *b1 << endl;
    return 0;
}

人造人 发表于 2021-5-8 16:19:51

因为这段内存空间还没有被其他程序使用,里面的内容当然没有改变了

清启牧 发表于 2021-5-8 16:28:10

人造人 发表于 2021-5-8 16:19
因为这段内存空间还没有被其他程序使用,里面的内容当然没有改变了

这段内存空间被释放了,里面存储的内容不会被删除吗?

人造人 发表于 2021-5-8 18:32:17

清启牧 发表于 2021-5-8 16:28
这段内存空间被释放了,里面存储的内容不会被删除吗?

怎么删除?没办法删除的
页: [1]
查看完整版本: c++指针赋值是深拷贝还是浅拷贝