代码之家  ›  专栏  ›  技术社区  ›  wrongusername

指针坏了吗?

  •  14
  • wrongusername  · 技术社区  · 15 年前

    我现在正在用C++编程,我喜欢使用指针。但其他较新的语言,如Java、C#和Python,似乎不允许显式声明指针。换句话说,你不能同时写 int x int * y ,并拥有 x 有价值的时候 y

    6 回复  |  直到 15 年前
        1
  •  18
  •   Steve Rowe    15 年前

    指针并不坏,它们很容易出错。在新的语言中,他们已经找到了做同样事情的方法,但却减少了被射中的风险。

    但是指针没有什么问题。去爱他们吧。

    对于你的例子,为什么你希望x和y都指向同一个内存?为什么不一直叫它x呢?

        2
  •  12
  •   fredoverflow    15 年前

    I'll start with one of my favorite Scott Meyers quotes :

    当我谈到异常处理时,我教人们两件事:

    • auto_ptr 旨在消除。

    • 指针是你的朋友,因为指针上的操作不能抛出。

    然后我告诉他们要有一个美好的一天


    但是,在编写良好的C++应用程序代码时,不应该使用原始指针。从未。您应该始终使用一些抽象层,而不是直接使用指针:

    • 使用智能指针来管理您使用的任何指针。智能指针,如 shared_ptr 自动门 ,和 unique_ptr 帮助确保您不会过早泄漏资源或释放资源。

    • vector 和 map ,可以确保代码是异常安全的(这意味着即使抛出异常,也不会泄漏资源)。

    • 当您使用传统的或第三方API时,您绝对必须使用原始指针,请编写一个类来封装该API的使用。

    C++具有范围绑定资源管理的形式的自动资源管理(SBRM,也称为资源获取是初始化,或RAII)。使用它。如果你不使用它,你就错了。

        3
  •  6
  •   EboMike    15 年前

        4
  •  3
  •   Ben Voigt    15 年前

    真正的“指针”有两个特点。

    • 它保存另一个对象(或原语)的地址
      • 并公开该地址的数字性质,以便进行算术运算。

    通常为指针定义的算术运算是:

    1. 向数组中的指针添加整数,该数组返回另一个元素的地址。
    2. 将两个指针相减到同一数组中,该数组返回介于两者之间(包括一端)的元素数。

    托管语言通常会引导您走上“引用”的道路,而不是指针。引用还保存另一个对象(或原语)的地址,但不允许使用算术。

    除此之外,这意味着您不能使用指针算术来遍历数组的末尾,并使用错误的类型处理其他一些数据。另一种形成无效指针的方法是在这种环境中使用垃圾收集。

    这一起确保了类型安全,但却严重丧失了通用性。

        5
  •  3
  •   Paul Michalik    15 年前

    我试着直接回答OP的问题:

    换句话说,你不能同时写 值,而y是指针,在 在这背后?

    这背后的原因是这些语言中的托管内存模型。在C#(或Python,或Java,…)中,资源的生命周期和内存的使用是由底层运行时自动管理的,或者由它的 垃圾收集器 ,准确地说。简而言之:应用程序无法控制资源在内存中的位置。它没有指定,甚至不能保证在资源的生命周期内保持不变。因此,指针作为“虚拟或物理内存中某物的位置”的概念是完全不相关的。

        6
  •  0
  •   ha9u63a7    13 年前

    正如前面提到的,如果你有一个庞大的应用程序,指针可能会出错,而且实际上会出错。这就是我们有时看到Windows由于创建空指针而出现问题的原因之一!我个人不喜欢指针,因为它会导致可怕的内存泄漏,无论你如何管理好你的内存,它最终会在某些方面追捕你。在处理图像处理应用程序时,我在OpenCV中经历了很多。有很多指针在周围浮动,把它们放在一个列表中,然后再检索它们,这给我带来了问题。但是,使用指针也有好的一面,这通常是优化代码的好方法。这完全取决于你在做什么,你必须满足什么样的规格,等等。