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

r3k*_*k0j -1 c++ pointers smart-pointers

我正在阅读C++ 是否可以确定指针是否指向有效对象?该线程中的正确答案是不,你不能这样做,但该线程现在已经很旧了,我想知道是否有任何更改。我读到用智能指针这是可能的。那么如何才能实现这一目标呢?

eer*_*ika 5

是否可以确定指针是否指向有效对象

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

我想知道是否有什么改变

在这方面没有任何改变。

我读到用智能指针这是可能的。那么如何才能实现这一目标呢?

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

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

那么如何才能实现这一目标呢?

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