C++ 四人帮-设计模式-这些模式样本是否以过时的方式编码?

C++ 四人帮-设计模式-这些模式样本是否以过时的方式编码?,c++,design-patterns,coding-style,C++,Design Patterns,Coding Style,为了澄清我的问题。。。臭名昭著的GoF书籍中的每个模式-设计模式 可重用面向对象软件的元素——在C++中有代码示例。p> 那些是最新的吗?或者现在C++中的代码看起来有很大不同? 我问这个问题,因为当我把我的代码和我的最后一个问题贴在一起时,很多C++开发者告诉我应该去掉指针,指针在那里被广泛使用。 它们有点过时了,是的。但这些书的一部分观点是,这些模式在几种不同的语言和几种不同的风格中都很有用。因此,虽然代码有点过时,但它背后的思想却不是,这些思想才是这些书中重要的东西 我希望看到一些利用元编

为了澄清我的问题。。。臭名昭著的GoF书籍中的每个模式-设计模式 可重用面向对象软件的元素——在C++中有代码示例。p> 那些是最新的吗?或者现在C++中的代码看起来有很大不同?
<>我问这个问题,因为当我把我的代码和我的最后一个问题贴在一起时,很多C++开发者告诉我应该去掉指针,指针在那里被广泛使用。

它们有点过时了,是的。但这些书的一部分观点是,这些模式在几种不同的语言和几种不同的风格中都很有用。因此,虽然代码有点过时,但它背后的思想却不是,这些思想才是这些书中重要的东西

我希望看到一些利用元编程技术的模式实现。我强烈怀疑一些模式,如桥接器、适配器和可能的Facade,使用元编程实现起来要简单得多。从另一个答案来看,阅读描述,这可能是一本关于这类事情的好书。不过,我个人无法担保

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

下面是一些在各种上下文中使用哪种智能指针的示例。这些示例假设您有一个C++,其中包括Tr1(技术报告1)扩展:

当您有一个指向指向它的对象的完全拥有的对象的指针时,请使用
::std::auto_ptr
(或在C++1x中使用
::std::unique_ptr
)。请记住,
::std::auto_ptr
不能存储在STL容器中,但是
::std::unique_ptr
没有此问题。例如组件模式(只要不共享两个子组件)、外观模式和适配器模式。此外,工厂模式可能会产生
::std::auto_ptr
s(或C++1x中的
::std::unique_ptr
s),除非有很好的理由产生
::std::shared_ptr
s

当您有一个指向具有共享所有权的对象的指针时,请使用
::std::tr1::shared\u ptr
。例如,Flyweight图案。此外,在某些情况下,组件模式也可能具有此属性。它在桥接模式中也可能有用


当你有一个指向你逻辑上不拥有的东西的指针时,那么一个
::std::tr1::weak_ptr
就是最好的选择。请记住,如果您使用
::std::tr1::weak_ptr
,那么对于逻辑上拥有(或共享所有权)指向的项的所有对象,您也应该使用
::std::tr1::shared_ptr
。观察者模式就是一个例子。

作者将代码用作示例,而不是编写生产代码。生产代码更健壮,可以检查错误和异常。这类书籍通常不显示这些,也不包含try-catch块或其他业务逻辑

这本书的目的是提供一些想法和概念,比如如何设计程序来解决常见的软件问题,而不是使用什么语法或代码。此外,无论作者在哪里使用了原始指针,您都可以用智能指针之类的东西(如果可能的话)来替换它们,以使其更加健壮

然而,动态多态性只能通过指针或引用实现,因此它们仍然有效,甚至可以在生产代码中使用

此外,在过去十年中,C++代码的编写方式也发生了很大的变化。因此,您可以将这些新技术与GOF书中介绍的旧想法/模式结合起来。例如,Andrei Alexandrescu在他的书中使用模板实现了许多模式(旧模式):


这是一个常见问题。另一个例子,C++中的塞奇威克算法是一个很好的算法文本,但是它有相当的C++ C++代码。这本书以现代C++为例:[免责声明:我是作者]没有<代码> STD::SCONDEXYPTR ,你混合<代码> Boo::SCONDEXYPTR 和<代码> STD::UnQuyJPPT?(
scoped_ptr
来自boost。唉,我还没有做很多C++1x特定的编程,所以专有名称不在我的指尖。谢谢你的帮助。现在已经修复了。