我有一个等于另一个指针的指针
我想检查我的指针是否等于非空指针。
int* ptr0 = new int(5);
int* ptr1 = ptr0;
delete ptr0;
if ( ?? )
{
std::cout << "ptr1 equals to a null ptr" << std::endl;
}
我应该在条件下写什么?
知道:
答案 0 :(得分: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;
}
}
答案 1 :(得分:1)
你做不到。虽然理论上你可以根据new
的实现,检查指向的内存当前是否正在使用,但是没有办法确认它仍然是你原来只使用原始指针指向的对象。
你可以使用C ++ 11智能指针来做类似的事情,但我真的不认为这是你真正想做的事情。
答案 2 :(得分:1)
delete
不会产生空指针。它导致悬挂指针,一般无法检测到。所以,你不能。