我有一个指向null的指针,我想给它赋值,但是如果我遵从它,我会得到一个错误。
*nullPointer = value;
但是就像我说的,我得到了一个错误。我怎么能这样做呢?我不能这样做
nullPointer = &value
因为后来的值(它是一个对象)被删除,nullPointer将指向无效内存。
6yoyoihd1#
指针必须指向一个有效的对象才能有意义,您有责任确保它所指向的对象保持有效。如果它所指向的对象在堆栈上,并且一旦它的作用域结束就变得无效你应该使用动态内存在堆上分配对象。但是这里的信息太少,不知道你在做什么,以及你是否需要这个。
int *ptr = new int; *ptr = value; ... ... delete ptr;
osh3o9ms2#
指针指向内存(RAM)中的一个位置。当你有一个null pointer时,它指向null,这意味着它没有指向内存中的位置。只要指针为null,它就不能用来存储任何信息,因为没有内存备份它。要使用空指针,必须先分配内存,然后让指针指向新分配的内存。
null pointer
*int p = null; *p = 10; //this won't work as there is no memory backing up this pointer p = new int; *p = 10;
mgdq6dx13#
这听起来像是您想要一个指针指向一个对象,直到/除非该对象被删除,此时它的行为大致上又像一个空指针--也就是说,您至少可以检测到它不再指向任何东西。如果是这种情况,您可能需要weak_ptr(在C++11、TR 1和Boost中可用)。您可以将其与shared_ptr s沿着使用。当对象的最后一个shared_ptr被销毁时,对象本身也将被销毁。在此之后,您可以检测到weak_ptr不再引用任何内容(Boost documentation等文件中有更多详细信息)。编辑:下面是Boost文档中针对weak_ptr的一个示例:
weak_ptr
shared_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 }
3条答案
按热度按时间6yoyoihd1#
指针必须指向一个有效的对象才能有意义,您有责任确保它所指向的对象保持有效。
如果它所指向的对象在堆栈上,并且一旦它的作用域结束就变得无效你应该使用动态内存在堆上分配对象。但是这里的信息太少,不知道你在做什么,以及你是否需要这个。
osh3o9ms2#
指针指向内存(RAM)中的一个位置。当你有一个
null pointer
时,它指向null,这意味着它没有指向内存中的位置。只要指针为null,它就不能用来存储任何信息,因为没有内存备份它。要使用空指针,必须先分配内存,然后让指针指向新分配的内存。
mgdq6dx13#
这听起来像是您想要一个指针指向一个对象,直到/除非该对象被删除,此时它的行为大致上又像一个空指针--也就是说,您至少可以检测到它不再指向任何东西。
如果是这种情况,您可能需要
weak_ptr
(在C++11、TR 1和Boost中可用)。您可以将其与shared_ptr
s沿着使用。当对象的最后一个shared_ptr
被销毁时,对象本身也将被销毁。在此之后,您可以检测到weak_ptr
不再引用任何内容(Boost documentation等文件中有更多详细信息)。编辑:下面是Boost文档中针对
weak_ptr
的一个示例: