我可以使用已删除指针的名称吗?

Can I use a name of a deleted pointer?

指针删除后是否允许使用指针名?

例如,这段代码将无法编译。

    int hundred = 100;
    int * const finger = &hundred;
    delete finger;

    int * finger = new int; // error: conflicting declaration 'int* finger'

这也不会:

    int hundred = 100;
    int * const finger = &hundred;
    delete finger;

    int finger = 50; // error: conflicting declaration 'int finger'

没有。 int * 仍然是一个有生命的对象。它指向的 int 的生命周期已经结束。

注意

int hundred = 100;
int * const finger = &hundred;
delete finger;

具有未定义的行为,因为您试图 delete 一个未由 new 分配的对象。

一般来说,newdelete不应该出现在C++程序中。拥有指针应该是std::unique_ptr(或者很少std::shared_ptr或其他用户定义的智能指针类型)。