是否可以确定指针是否指向有效对象,如果是,如何确定?

Is it possible to determine if a pointer points to a valid object, and if so how?

我正在阅读 C++ Is it possible to determine whether a pointer points to a valid object? 并且此线程中的正确答案是不,你不能那样做,但是线程现在已经很旧了,我想知道是否有任何更改。我用可能的智能指针阅读了它。那么如何实现呢?

Is it possible to determine if a pointer points to a valid object

不,通常无法确定指针是否指向有效对象。

I wanted to know if anything has changed

这方面没有任何变化。

I read that with smart pointers that would be possible. So how could that be achieved?

除非你以糟糕的方式滥用它,否则智能指针永远不会无效。因此,无需检查它是否有效。它应该为 null 或指向有效对象。

弱指针是一种特殊的智能指针,它不直接拥有对象,而是指向共享指针拥有的对象。当没有共享指针指向它时,指向的对象可能会被销毁。可以询问弱指针是否发生了这种情况。这种状态有点类似于无效,除了状态是可验证的。

So how could that be achieved?

您可以std::make_uniquestd::make_shared创建智能指针拥有的动态对象。它们之间的选择取决于您需要哪种所有权:独特的或共享的。只能从共享指针创建弱指针。