相关疑难解决方法(0)

使用指针显式调用指向对象的析构函数后,指针持有什么样的值?

来自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

我不相信它可以是无效的指针值。无效的指针值与存储持续时间的结束相关联,而不是与对象生命周期相关联。“当它表示的存储达到其存储持续时间的末尾时,指针值变得无效”。存储仍然有效。

在我看来,指针可能没有指针值。我哪里做错了?

c++ pointers lifetime language-lawyer

5
推荐指数
2
解决办法
173
查看次数

标签 统计

c++ ×1

language-lawyer ×1

lifetime ×1

pointers ×1