什么是不同类别的指针?

Sub*_*bbu 1 c c++

任何人都可以解释不同类别的指针(如野指针)吗?

Ste*_*owe 9

  • 有效指针:指向内存中的真实对象的指针
  • 无效指针:指向内存的指针不是它应该是的.
  • NULL指针:一个指针,其值为0,因此指向任何位置.
  • 悬空指针(有时也是野指针):指向已删除/释放的内存.
  • 智能指针:根本不是指针,而是一个像指针一样的对象,但为你管理内存.

  • @SF:不是在C++中.对于所有指针,`0`始终是空指针.`0`不需要对应内存地址0,但编译器会在那里隐藏细节.所以`0`总是可以安全地比较指针. (3认同)
  • 但从逻辑上讲,它们是不同的.如果你已经超出界限或错误地将它分配到错误的地址,指针是无效的,如果你忘记它已经被释放已经悬空 (2认同)
  • @SF:我认为你总是可以检查`if(指针)`,因为它被解释为`if(pointer!= 0)`并且指针和*常量*0的比较被视为与nullptr的比较(无论如何)这是什么).这对我们来说不要担心空指针不为零的这些架构. (2认同)

Den*_*ose 6

还有函数指针,它指向代码而不是对象.指向成员的指针,需要一个类的实例才能完全取消引用.指向成员函数的指针,指向代码并要求类和实例完全取消引用.

有几种不同类型的智能指针.这些用于包装动态内存分配,并跟踪底层数据的所有权.当没有人拥有数据时,动态内存会自动释放.这里的三个巨头是范围指针,共享指针和弱指针.范围指针只有一个所有者,当它们超出范围时,它们会被删除[参见std::auto_ptrC++ 03和std::unique_ptrC++ 0x].共享指针可以拥有许多所有者,并且在所有所有者完成后,内存不会被释放.弱指针是这些的一种形式,但它们并不总是保持严格的所有权; 他们在需要时请求所有权,如果相应的共享指针已用完所有者,则该请求被拒绝.


SF.*_*SF. 5

......正确地添加史蒂夫的答案 -

  • 指向变量的指针(int*,char*也是void*一个特殊的伪类型,在解除引用之前必须始终强制转换.也指向指针.)
  • 指向函数(void(*)(),int(*)(int))等的指针.)

区别很重要,因为一个家庭不能投入另一个家庭,反之亦然.