如何检查指针是否仍指向C++中的有效内存?

thp*_*hp9 2 c++ pointers

我有一个指针,它等于另一个指针

我想检查我的指针是否等于非空的指针.

int* ptr0 = new int(5);
int* ptr1 = ptr0;

delete ptr0;

if ( ?? )
{
    std::cout << "ptr1 equals to a null ptr" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我该怎么写这个条件?

知道:

  • 我不想在删除之后将任何ptr 设置为nullptr
  • 我没有访问我的条件PTR0

ppl*_*ppl 6

使用shared_ptr<T>具有组合weak_ptr<T>.

例如,

int main() {
    std::tr1::shared_ptr<int> ptr0(new int);
    std::tr1::weak_ptr<int> ptr1_weak(ptr0);

    *ptr0 = 50;

    // Depending on if you reset or not the code below will execute
    //ptr0.reset();

    if (std::tr1::shared_ptr<int> ptr1 = ptr1_weak.lock()) {
        std::cout << "Changing value!" << std::endl;
        *ptr1 = 500;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您能详细说明一下您的答案,那就太好了,因为 OP 可能不熟悉 shared/weak_ptr 及其使用模式。:) (2认同)
  • 我刚刚添加了一个代码示例来说明这个概念.这两个智能指针既可以通过Boost库在C++ 98中使用,也可以通过`<memory>`在C++ 11中使用. (2认同)