为什么C ++程序员应尽量减少对“新”的使用?
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我 在使用std :: list <std :: string>时 偶然发现 了std :: string的内存 溢出问题 内存泄漏 , 其中一条评论 说: 停止使用 new 这么多。 我看不到您在任何地方使用新产品的任何原因。 您可以在C ++中按值创建对象,这是使用该语言的巨大优势之一。 您不必在堆上分配所有内容。 不要像Java程序员那样思考。 我不确定他的意思。 为什么要在C ++中尽可能频繁地通过值创建对象,它在内部有什么不同? 我是否误解了答案? #1楼 C ++ 17之前的版本: 因为 即使将结果包装在智能指针中, 它也容易发生细微的泄漏。 考虑一个“谨慎”的用户,他记得将对象包装在智能指针中: foo(shared_ptr<T1>(new T1()), shared_ptr<T2>(new T2())); 该代码很危险,因为 不能保证 在 T1 或 T2 之前 构造了 shared_ptr 。 因此,如果 new T1() 或 new T2() 的一个在另一个成功之后失败,则第一个对象将被泄漏,因为不存在用于破坏和重新分配它的 shared_ptr 。 解决方案:使用 make_shared 。 后C ++ 17: 这不再是问题:C ++ 17对这些操作的顺序施加了约束,在这种情况下,确保对