Fer*_*eak 30 c++ memory-management c++14
我刚收到一条评论,比如说
问题是手动内存管理.
delete在用户代码中没有位置,从C++ 14开始,也没有new
有人可以解释一下为什么吗?
Kon*_*lph 37
警告:我坚持这个答案,因为我认为它提出了一个最佳实践,可以提高~95%的C++代码 - 可能更多.也就是说,请阅读完整的评论,以讨论一些重要的警告.
由于这是我的评论,这是我的演讲解释这一点.
简而言之:
[原始]指针必须.不.拥有.资源.
因为我们有管理这导致错误更少的资源,更短,更可读的代码和更高的更好的方式这是容易出错和不必要的信心在代码的正确性.从经济角度来说:它们的成本更低.
关于我所做的评论,更具体一点:
从C++ 11开始(现在已经有两年了,在所有现代编译器的相关部分中实现),手动删除内存是完全没必要的(除非你编写非常低级的内存处理代码),因为你总是可以使用智能而是指针,通常甚至不需要它们(参见演示文稿).但是,C++ 11仍然需要new在实例化新的时使用std::unique_ptr.在C++ 14中,该函数std::make_unique使得这种使用变得new不必要.因此,它也不再需要了.
仍然可以说是放置new代码的地方,但这是(a)与正常情况完全不同的情况new,即使语法相似,并且(b)在大多数情况下可以通过使用allocator::construct函数来替换.
詹姆斯已经指出了这个规则的一个例外,我真实地忘记了这个例子:当一个物体管理自己的生命时.我会去上肢体和说,这是不是在大多数情况下一个常见的成语,因为对象的生命时间可以随时在外部管理.但是,在某些应用程序中,将对象与其余代码分离并让它自行管理可能是有益的.在这种情况下,您需要动态分配对象并使用它来释放它delete this.