c++老师告诉我不要使用指针

C++ Teacher told me not to use pointers

本文关键字:指针 老师 告诉我 c++      更新时间:2023-10-16

昨天我的老师告诉我不要使用指针,除非我想编程一些非常低级的东西。他说垃圾收集器会为我做所有的事情,所以指针基本上是低效和危险的。我很生气,因为我之前听过这两者的区别。

那么什么是对的,什么是错的呢?我是否应该使用指针?如果没有,为什么没有人使用它们呢?

在c++中使用垃圾收集器需要严格的纪律和相当有能力的程序员,即使c++ 11中增加了对垃圾收集的支持。

所以你的老师可能是指别的东西。

就像,可能他/她的意思是你应该优先使用标准库容器(如vectorstring),以及智能指针来处理指针的所有权。

你老师说的大致是对的。这可能意味着以下两种情况之一:

  1. 他不知道自己在说什么,只是在重复一些口头禅
  2. 他的意思是正确的,但肯定是误会了。

我强烈倾向于选项(2)(尽管无知的老师也不是闻所未闻):

正如其他人所说,c++通常不附带GC,虽然在c++中完全有可能使用GC,但用更不符合常规。

另一方面,你的老师在避免使用指针方面是正确的。c++标准化委员会的成员、本网站的用户和互联网上其他直言的专家都有一个广泛的共识,即现代c++使得原始指针的使用(特别是手动内存管理)在很大程度上是不必要的。

传统上,大多数c++项目都充斥着指针。但是原始指针和手动内存管理容易出错,可能效率低下(由于引入了间接和缓存丢失),最重要的是,它们在现代c++中是不必要的

如果你真的想成为一名优秀的C或c++程序员,你需要学习和使用指针。事实上,这是一个非常强大的功能,可能有一定的风险,但它们对于完成某些任务是绝对必要的。

如果你是初学者,你的老师是对的,但如果你更高级,你总有一天会使用指针,因为它使你的程序非常快。

关键是你很容易在使用指针时犯错误,从而导致不好的后果(例如使你的程序崩溃)。

指针还有其他优点,例如,如果你将一个原始对象存储在Vector中并编辑该Vector,则每次都需要遍历该Vector以找到要查找的元素(慢),或者你将指向该Vector中的对象的指针存储在该Vector中并使用指向该对象本身的指针(快)。

为什么使用托管c++ ?这似乎适得其反,至少在我看来是这样。如果我要为gc支付开销,我会使用c#。

关于指针,它们非常棒,永远不应该被忽视。但是引用同样有用,您不必对。

进行null检查。

根据你的编译器查看std::shared_ptr/std::weak_ptr/std::unique_ptr

他们介绍了在大多数书籍/语言中可以找到的基本保留计数

您可以在c++中编写不使用指针的程序。通过引用传递对象要安全得多。

由于不允许将指针放入容器,因此许多容器都需要复制对象。当使用大型数据项或多个索引项时,这可能是一个问题。