我可以使用已删除指针的名称吗?
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
分配的对象。
一般来说,new
和delete
不应该出现在C++程序中。拥有指针应该是std::unique_ptr
(或者很少std::shared_ptr
或其他用户定义的智能指针类型)。
指针删除后是否允许使用指针名?
例如,这段代码将无法编译。
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
分配的对象。
一般来说,new
和delete
不应该出现在C++程序中。拥有指针应该是std::unique_ptr
(或者很少std::shared_ptr
或其他用户定义的智能指针类型)。