所以为了澄清我的问题......臭名昭著的 GoF 书中的每个模式 -设计模式
可重用的面向对象软件的元素- 有 C++ 代码示例。
这些是最新的吗?或者现在的 C++ 代码看起来有很大不同吗?
我这么问是因为当我发布带有最后一个问题的代码时,许多 C++ 开发人员告诉我应该摆脱指针,那里广泛使用的指针......
是的,它们有点过时了。但这些书的部分观点是,这些模式在多种不同的语言和多种不同的风格中都很有用。因此,虽然代码有点陈旧,但其背后的想法却并非如此,而这些想法正是这些书中的重要内容。
我希望看到一些利用元编程技术的模式实现。我强烈怀疑某些模式,例如 Bridge、Adapter 以及可能的 Facade,使用元编程实现起来不会那么繁琐。从另一个答案,并阅读描述,它看起来像现代 C++ 设计:通用编程和设计模式的应用 https://rads.stackoverflow.com/amzn/click/com/0201704315对于此类事情可能是一本好书。但我个人不能保证这一点。
除了可能使用泛型编程和模板技术之外,主要区别在于裸指针在当今的 C++ 中很少见。通常应该使用有效的智能指针类型,因为它们可以为您处理许多资源管理问题。坦率地说,除非您非常清楚自己在做什么,否则我不建议尝试基于通用编程的设计。
以下是在不同上下文中使用哪种类型的智能指针的一些示例。这些示例假设您有一个包含 TR1(技术报告 1)扩展的 C++:
当您有一个指针,该指针完全由指向它的对象拥有时,请使用::std::auto_ptr
(or ::std::unique_ptr
在 C++1x 中)。请记住::std::auto_ptr
不能存储在STL容器中,但是::std::unique_ptr
没有这个问题。示例可能是组件模式(只要没有共享两个子组件)、外观模式和适配器模式。此外,工厂模式可能应该生产::std::auto_ptr
s (or ::std::unique_ptr
C++1x 中的 s)除非有充分的理由进行生产::std::shared_ptr
s.
当你有一个指向共享所有权的指针时,使用::std::tr1::shared_ptr
。例如,享元模式。此外,在某些情况下,组件模式也可能具有此属性。它在桥接模式中也可能有用。
当你有一个指向你在逻辑上不拥有的东西的指针时,那么::std::tr1::weak_ptr
是要走的路。请记住,如果您使用::std::tr1::weak_ptr
你还应该使用::std::tr1::shared_ptr
对于逻辑上拥有(或共享所有权)所指向项目的所有对象。观察者模式就是一个例子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)