代码之家  ›  专栏  ›  技术社区  ›  Bill K

使用Boost指针是否会改变OO设计方法?

  •  3
  • Bill K  · 技术社区  · 7 年前

    在从C++切换到C++ W/Boost之后,你认为你的ONE技能有所改进吗?

    你注意到“正常”C++代码中的模式,你不会认为你已经切换,或者你发现它能使一个更抽象的设计?

    我想我真的想知道你是把它作为一个工具,还是改变你的OO设计的整个方法,以便在使用Boost指针时更有效地使用对象。

    编辑:摘要

    这个问题有点奇怪——我问过,因为我已经遇到了这么多的C++代码,根本就不是OO。我很确定(在迁移到托管语言之前,我和我的工作),在C++中用OO比在托管语言中更难思考。

    从这些帖子来看,我猜你在找到更好的内存管理方法之前就已经了解了OO的价值,所以当你开始寻找Boost之类的东西时,你已经在大量使用OO方法了。

    我有点期待着一大堆答案,说它能帮助他们在OO中思考,但现在我想起来,如果你不使用OO,Boost指针并不是很有帮助,你也看不到它们的需要(所以你不会回答)。

    5 回复  |  直到 17 年前
        1
  •  9
  •   Robert P    17 年前

    在C++的一个项目中,我做了大约六年前,我们实现了我们自己的Boost型自动指针方案。它工作得很好,除了其中的各种错误。(当然希望我们使用了Boost…)

    尽管如此,它并没有改变我们开发代码的方式。有或没有托管指针的面向对象设计非常相似。有时需要返回对象,有时指向对象的指针更重要。智能指针的好处与您如何设计应用程序的关系不大。与传递潜在危险的内存泄漏不同,您可以传递相同的数据,并相当确定它不会泄漏。

    在这方面,您可以使用智能指针做更多的事情:简化代码。您可以更自由地传递复杂的数据结构或类,而不是在任何地方返回整数或基本结构。你可以更快地构建更复杂的应用程序,而不用担心那么多。它让你在需要的时候拥有C和C++的原始能力(如果你不需要它,为什么你会使用C或C++?)并且拥有轻松的内存管理,这是一个惊人的生产力提升。如果自动管理的内存没有用,那么它就不会用地球上几乎所有其他语言了!

        2
  •  3
  •   dirkgently    17 年前

    STL/Boost是一种工作工具。它们帮助我实现我的想法,而不是反过来。说明:提神并没有提高我的技能。

        3
  •  3
  •   Benoît photo_tom    17 年前

    它深刻地改变了我的编码方式,我正在传播这个词。特别是通过使用boost.graph和boost.propertymap,我意识到我可以在一个简单的类中编写“真”算法,不知道(还不知道)如何访问信息,甚至不知道(或关心)在执行算法时可能会做什么子操作。 我的团队现在正在使用图形工具设计复杂的计算功能。

    有人可能会争辩说,模板确实是这种变化的基础,但Boost显然为这种变化铺平了道路。对我来说,发现新的Boost库通常是学习可应用于我们日常工作的重要内容的绝佳机会!

        4
  •  1
  •   timday    17 年前

    一旦我发现 boost::bind (和) boost::function 我发现不是继承和抽象基类的思考(爪哇/C语言)中的“接口”,我开始把一切看作是一个函子。

    例如,pre-boost我已经建立了一个菜单系统,其中的菜单是 IActionable* 项目和任何想要连接到菜单系统的东西都必须继承IActionable并提供一个操作方法。我正在实现包含 boost::function<void()> 把我想要的东西扔进去 Boost::绑定 .

    另一件事:仅仅看看Boost成功使用模板的方式,真的让我提高了对模板可能实现的期望,并努力在自己的代码中更好地使用模板,所以我正在编写更多的“通用”和更少的“OOP”代码。

    智能指针当然是有用的,并且得到了大量的覆盖,但是除了清除一些显式的删除之外,它们几乎不是范例转换。

        5
  •  0
  •   Tommy Hui    17 年前

    对我来说,它并没有改变我设计的方式,但是Boost确实给了我额外的工具,这样某些事情就更容易了。例如,使用“智能”指针,我不再需要考虑确保在适当的时间销毁某些对象创建(主要是在例外情况下)。但是像任何工具一样,我必须理解何时使用它们,何时不使用它们。