gpt4 book ai didi

c++ - 四人组 - 设计模式 - 这些模式示例是否以过时的方式编码?

转载 作者:IT老高 更新时间:2023-10-28 21:51:48 26 4
gpt4 key购买 nike

所以要澄清我的问题...臭名昭著的 GoF 书中的每个模式 - 设计模式Elements of Reusable Object-Oriented Software - 在 C++ 中有它的代码示例。

这些是最新的吗?还是现在 C++ 中的代码看起来很不一样?

我之所以这么问,是因为当我在最后一个问题中发布我的代码时,许多 C++ 开发人员告诉我应该摆脱指针,那里广泛使用的指针......

最佳答案

它们有点过时了,是的。但这些书的部分观点是,这些模式在几种不同的语言和几种不同的风格中都很有用。因此,尽管代码有点陈旧,但其背后的想法却并非如此,而这些想法在这些书中很重要。

我希望看到一些利用元编程技术的模式实现。我强烈怀疑某些模式,例如桥接、适配器和可能的外观,使用元编程实现起来要简单得多。从另一个答案和阅读描述来看,它看起来像 Modern C++ Design: Generic Programming and Design Patterns Applied对于这类事情可能是一本好书。不过我不能亲自担保。

除了可能使用泛型编程和模板技术之外,主要区别在于裸指针在当今的 C++ 中很少见。通常应该使用有效的智能指针类型,因为它们可以为您处理很多资源管理问题。坦率地说,除非您非常清楚自己在做什么,否则我不建议您尝试基于通用编程的设计。

以下是在各种上下文中使用哪种类型的智能指针的一些示例。这些示例假定您有一个包含 TR1(技术报告 1)扩展的 C++:

当你有一个指向它的对象完全拥有的东西的指针时,使用 ::std::auto_ptr (或 ::std::unique_ptr在 C++1x 中)。请记住,::std::auto_ptr 不能存储在 STL 容器中,但 ::std::unique_ptr 没有这个问题。示例可能是组件模式(只要没有共享两个子组件)、外观模式和适配器模式。此外,工厂模式可能会生成 ::std::auto_ptrs(或 C++1x 中的 ::std::unique_ptrs),除非确实存在产生 ::std::shared_ptrs.

的充分理由

当你有一个指向共享所有权的东西的指针时,使用 ::std::tr1::shared_ptr。例如享元模式。此外,在某些情况下,组件模式也可能具有此属性。它在桥接模式中也可能有用。

如果你有一个指向你在逻辑上不拥有的东西的指针,那么 ::std::tr1::weak_ptr 就是要走的路。请记住,如果您使用 ::std::tr1::weak_ptr 您还应该对所有符合逻辑的对象使用 ::std::tr1::shared_ptr拥有(或共享所有权)指向的项目。观察者模式就是一个例子。

关于c++ - 四人组 - 设计模式 - 这些模式示例是否以过时的方式编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5748983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com