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

时间:2013-04-05 13:58:15

标签: c++ pointers

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

那么什么是对的,什么是错的?我应该使用指针吗?如果没有,为什么如果没有人使用它们,它们甚至会被实施?

6 个答案:

答案 0 :(得分:16)

使用带有C ++的垃圾收集器需要强大的纪律,以及相当称职的程序员,即使在C ++ 11中添加了对垃圾收集的支持。

所以你的老师可能意味着其他东西。

就像,他/她可能意味着您应该优先使用标准库容器(如vectorstring),以及智能指针来处理必须处理指针的所有权。这是个好建议。

答案 1 :(得分:8)

你的老师所说的属于“几乎正确”的类别。这可能意味着两件事:

  1. 他不知道他在说什么,只是重复一句短语
  2. 他的意思是正确的,并且在某处发生了错误的沟通。
  3. 我非常倾向于选项(2)(尽管没有闻所未闻的老师):

    正如其他人所说的那样,C ++通常不会附带GC,虽然完全有可能在C ++中使用它,但用更加非常规。

    另一方面,您的老师 正确避免指针。 C ++标准化委员会的成员,这个网站上的用户以及互联网上的其他声音专家已经达成了广泛的共识,即现代C ++在很大程度上不需要使用原始指针(特别是手动内存管理)。

    传统上,大多数C ++项目都充斥着指针。但原始指针和手动内存管理容易出错,可能效率低下(由于引入了间接和缓存未命中),最重要的是,they are unnecessary in modern C++

答案 2 :(得分:6)

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

答案 3 :(得分:2)

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

关键是你可以轻易地使用具有不良后果的指针进行错误解决(例如,使程序崩溃)。

指针还有其他优点,例如,如果将原始对象存储在Vector中并编辑该向量,则需要每次迭代该向量以查找搜索的元素(慢),或者存储指针指向该向量中的对象并使用指向该对象的指针(快速)。

指针有无数其他例子。

答案 4 :(得分:0)

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

关于指针,它们很棒,不应该被忽视。但是引用同样有用,您不必对其进行null检查。

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

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

答案 5 :(得分:0)

您可以使用C ++编写程序而无需使用指针。通过引用传递对象更安全。

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