相关疑难解决方法(0)

对象生命周期结束和它何时不复存在之间有什么关系?

在下面的简短示例中,关于指针f指向或用于在从 返回之前指向的对象可以说些什么main

#include <vector>

struct foo {
    std::vector<int> m;
};

int main()
{
    auto f = new foo;
    f->~foo();
}
Run Code Online (Sandbox Code Playgroud)

我相信,不再是一个对象foo,其中f用于点。我收到了很多评论,说这可能不正确,而且可能有一个对象foo处于销毁、死亡或其他无效状态。

对于显式销毁但其存储仍然有效的对象的存在,语言标准有什么说法?

换句话说,是否可以合理地说仍然存在一个f超出其生命周期的对象?有没有一个对象不在它的生命周期中,没有开始构造并且没有被破坏?


编辑 :

很明显,一个对象可以在它不在其生命周期内时存在。在构造和销毁过程中,有一个对象,它的生命周期尚未开始或已经结束。来自https://timsong-cpp.github.io/cppwp/intro.object#1

[...] 一个对象在其构建期间 ([class.cdtor])、整个生命周期和销毁期间 ([class.cdtor]) 占用一个存储区域。[...]

但是在f->~foo();f(我们称之为o)指向的对象没有被构造之后,它不在它的生命周期中,也没有被破坏。我对本节的阅读是o不能再占用存储空间,因为它不在任何列举的情况下。似乎这意味着o不再有并且不再有指向的指针o。相反,如果您有一个指向o该指针的指针,那么该指针将指向o无法占用的存储空间。


编辑2:

如果不再有对象,那么还有什么样的价值foo?似乎它可以拥有的唯一合理的可能值是指向对象的指针,这与该语句相矛盾。看到这个问题

c++ lifetime object-lifetime language-lawyer

12
推荐指数
1
解决办法
364
查看次数

标签 统计

c++ ×1

language-lawyer ×1

lifetime ×1

object-lifetime ×1