为什么不';有些语言不允许声明指针吗? 我现在正在用C++编程,我喜欢使用指针。但其他较新的语言,如Java、C#和Python,似乎不允许显式声明指针。换句话说,您不能同时编写int x和int*y,而x是一个值,而y是这些语言中的任何一种。这背后的原因是什么?
指针并不坏,它们很容易出错。在较新的语言中,他们找到了做同样事情的方法,但射中自己脚的风险较小 不过指针没有什么问题。去爱他们吧 对于您的示例,为什么希望x和y都指向同一个内存?为什么不总是叫它x呢为什么不';有些语言不允许声明指针吗? 我现在正在用C++编程,我喜欢使用指针。但其他较新的语言,如Java、C#和Python,似乎不允许显式声明指针。换句话说,您不能同时编写int x和int*y,而x是一个值,而y是这些语言中的任何一种。这背后的原因是什么?,c++,pointers,C++,Pointers,指针并不坏,它们很容易出错。在较新的语言中,他们找到了做同样事情的方法,但射中自己脚的风险较小 不过指针没有什么问题。去爱他们吧 对于您的示例,为什么希望x和y都指向同一个内存?为什么不总是叫它x呢 还有一点,指针意味着您必须自己管理内存生命周期。较新的语言更喜欢使用垃圾收集来管理内存,允许使用指针会使这项任务变得非常困难。指针可能被滥用,而托管语言更喜欢保护您免受潜在陷阱的影响。然而,指针当然不是坏事——它们是C语言和C++语言的一个整体特征,而没有它们编写C/C++代码既麻烦又麻烦。 当我谈
还有一点,指针意味着您必须自己管理内存生命周期。较新的语言更喜欢使用垃圾收集来管理内存,允许使用指针会使这项任务变得非常困难。指针可能被滥用,而托管语言更喜欢保护您免受潜在陷阱的影响。然而,指针当然不是坏事——它们是C语言和C++语言的一个整体特征,而没有它们编写C/C++代码既麻烦又麻烦。 当我谈论异常处理时,我教给人们两件事:
- 指针是你的敌人,因为它们会导致
设计用来消除的各种问题auto_ptr
- 指针是您的朋友,因为指针上的操作不能抛出
要点是指针非常有用,在C++编程时,理解它们是必要的。在不理解指针的情况下,你无法理解C++内存模型。当您实现一个资源拥有类(例如,智能指针)时,您需要使用指针,并且您可以利用它们的无抛出保证来编写异常安全的资源拥有类
但是,在编写良好的C++应用程序代码时,您不应该使用原始指针。从未。您应该始终使用某种抽象层,而不是直接使用指针:
- 尽可能使用引用而不是指针。引用不能为null,它们使代码更易于理解、编写和查看
- 使用智能指针管理您确实使用的任何指针。像
、shared_ptr
和auto_ptr
这样的智能指针有助于确保您不会过早泄漏资源或释放资源unique_ptr
- 使用标准库中的容器来存储对象集合,而不是自己分配数组。通过使用像
和vector
这样的容器,可以确保代码是异常安全的(这意味着即使抛出异常,也不会泄漏资源)map
- 使用容器时使用迭代器。正确使用迭代器要比正确使用指针容易得多,而且许多库实现提供了调试支持,帮助您找到错误使用迭代器的地方
- 当您使用遗留或第三方API时,您绝对必须使用原始指针,请编写一个类来封装该API的使用
- 它保存另一个对象(或原语)的地址
- 并公开该地址的数字性质,以便进行算术运算
总之,这确保了类型安全,但却严重丧失了通用性。我试图直接回答OP的问题: 换句话说,你不能两者都写 int x和int*y,并且x是a 值,而y是指针 那些语言。原因是什么 在这背后
这背后的原因是这些语言中的托管内存模型。在C#(或Python,或Java,…)中,资源的生命周期以及内存的使用都是由底层运行时自动管理的,确切地说是由它的垃圾收集器自动管理的。简单地说:应用程序无法控制资源在内存中的位置。它没有指定,甚至不能保证在资源的生命周期内保持不变。因此,指针作为“虚拟或物理内存中某物的位置”的概念是完全不相关的 正如有人已经提到的,如果您有一个大型应用程序,指针可能会出错,实际上也会出错。这是我们有时看到Windows由于创建空指针而出现问题的原因之一!我个人不喜欢指针,因为它会导致严重的内存泄漏,并且没有ma