来自https://timsong-cpp.github.io/cppwp/basic.compound#3:
指针类型的每个值都是以下之一:
- 指向对象或函数的指针(该指针被称为指向该对象或函数),或
- 超过对象末尾的指针 ([expr.add]),或
- 该类型的空指针值,或
- 无效的指针值。
使用指针显式调用对象的析构函数后,指针具有这四种值中的哪一种?例子 :
#include <vector>
struct foo {
std::vector<int> m;
};
int main()
{
auto f = new foo;
f->~foo();
// What is the value of `f` here?
}
Run Code Online (Sandbox Code Playgroud)
我不相信它可以是指向对象或函数的指针。不再有要指向的对象,它也不是函数指针。
我不相信它可以是超出对象末尾的指针。没有任何类型的指针算术,也没有涉及数组。
我不相信它可以是空指针值,因为指针不是nullptr。它仍然指向对象所拥有的存储空间,您可以使用它来执行放置new。
我不相信它可以是无效的指针值。无效的指针值与存储持续时间的结束相关联,而不是与对象生命周期相关联。“当它表示的存储达到其存储持续时间的末尾时,指针值变得无效”。存储仍然有效。
在我看来,指针可能没有指针值。我哪里做错了?