Barry

为什么C ++程序员应尽量减少对“新”的使用?

江枫思渺然 提交于 2020-01-06 17:03:26
【推荐】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对这些操作的顺序施加了约束,在这种情况下,确保对

几种常见的软件开发模型分析

非 Y 不嫁゛ 提交于 2019-11-29 09:41:27
概述 软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码、测试和维护阶段。 软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础。对于不同的软件系统,可以采用不同的开发方法、使用不同的程序设计语言以及各种不同技能的人员参与工作、运用不同的管理方法和手段等,以及允许采用不同的软件工具和不同的软件工程环境。 最早出现的软件开发模型是1970年W·Royce提出的瀑布模型。该模型给出了固定的顺序,将生存期活动从上一个阶段向下一个阶段逐级过渡,如同流水下泻,最终得到所开发的软件产品,投入使用。但计算拓广到统计分析、商业事务等领域时,大多数程序采用高级语言(如FORTRAN、COBOL等)编写。瀑布模式模型也存在着缺乏灵活性、无法通过并发活动澄清本来不够确切的需求等缺点。 常见的软件开发模型还有演化模型、螺旋模型、喷泉模型、智能模型等。 典型的开发模型 1. 边做边改模型(Build-and-Fix Model); 2. 瀑布模型(Waterfall Model); 3. 快速原型模型(Rapid Prototype Model); 4. 增量模型(Incremental Model); 5. 螺旋模型(Spiral Model); 6. 演化模型