c++老师告诉我不要使用指针
C++ Teacher told me not to use pointers
昨天我的老师告诉我不要使用指针,除非我想编程一些非常低级的东西。他说垃圾收集器会为我做所有的事情,所以指针基本上是低效和危险的。我很生气,因为我之前听过这两者的区别。
那么什么是对的,什么是错的呢?我是否应该使用指针?如果没有,为什么没有人使用它们呢?
在c++中使用垃圾收集器需要严格的纪律和相当有能力的程序员,即使c++ 11中增加了对垃圾收集的支持。
所以你的老师可能是指别的东西。
就像,可能他/她的意思是你应该优先使用标准库容器(如vector
和string
),以及智能指针来处理指针的所有权。
你老师说的大致是对的。这可能意味着以下两种情况之一:
- 他不知道自己在说什么,只是在重复一些口头禅
- 他的意思是正确的,但肯定是误会了。
我强烈倾向于选项(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++中编写不使用指针的程序。通过引用传递对象要安全得多。
由于不允许将指针放入容器,因此许多容器都需要复制对象。当使用大型数据项或多个索引项时,这可能是一个问题。
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- c++老师告诉我不要使用指针