我有一个指向null的指针,我想为它赋值。但如果我尊重它,我会得到一个错误。我试过这个:
*nullPointer=value;
但就像我说的那样,我收到了一个错误。我怎样才能做到这一点?。我做不到
nullPointer=&value
因为后来的值(它是一个对象)被删除而nullPointer将指向无效的内存。
答案 0 :(得分:7)
指针必须指向有效对象才能有意义,并且您有责任确保它指向的对象保持有效。
如果它指向的对象在堆栈上,并且在其作用域结束后变为无效您应该使用动态内存在堆上分配对象。然而,知道你在做什么以及你是否需要这些信息的信息太少了。
int *ptr = new int;
*ptr = value;
...
...
delete ptr;
答案 1 :(得分:2)
指针指的是内存中的位置(RAM)。当你有一个null pointer
时,它指向null,这意味着它没有指向内存中的位置。只要指针为空,它就不能用于存储任何信息,因为没有内存备份它。
要使用空指针,必须首先分配内存,然后让指针指向新分配的内存。
*int p = null;
*p = 10; //this won't work as there is no memory backing up this pointer
p = new int;
*p = 10;
答案 2 :(得分:2)
听起来你想要一个引用一个对象的指针,直到/除非该对象被删除,此时它的行为大致就像一个空指针 - 也就是说,你至少可以检测到它没有指向任何事情。
如果是这种情况,您可能需要weak_ptr
(在C ++ 11,TR1和Boost中可用)。您将其与shared_ptr
一起使用。当对象的最后shared_ptr
被销毁时,对象本身也将被销毁。之后,您可以检测到weak_ptr
不再引用任何内容(Boost documentation,其中包含更多详细信息)。
编辑:以下是weak_ptr
的推文文档中的示例:
shared_ptr<int> p(new int(5));
weak_ptr<int> q(p);
// some time later
// this will succeed *only* if at least one other reference to the pointee still exists.
if(shared_ptr<int> r = q.lock())
{
// use *r
}