从C ++切换到C ++ w / boost之后,您认为您的OOD技能有所改善吗?
您是否注意到“正常”C ++代码中的模式,您不会认为这些模式已经切换,或者您是否发现它可以实现更抽象的设计?
我想我真的很想知道你是否只是将它用作工具,或者你是否将整个方法改为OO设计,以便在使用增强指针时更有效地使用对象。
编辑:摘要
这个问题有点奇怪 - 我问的是因为我遇到了很多完全不是OO的C ++代码。我非常肯定(在转向托管语言之前,我已经完成了这项工作),在C ++中使用OO比在托管语言中更难以思考。
通过查看这些帖子,我猜你在找到需要更好的方法来管理内存之前就已经了解了OO的价值,所以当你开始寻找像Boost这样的东西时,你已经在使用OO方法论非常重要。
我有点期待一些答案,说它帮助他们在OO中思考,但现在我考虑一下,如果你没有使用OO,提升指针不是很有帮助,你不会看到他们的需要(所以你不会回答)。
答案 0 :(得分:9)
在我六年前做的C ++项目中,我们实现了自己的类似boost的自动指针方案。它工作得很好,除了它中的各种错误。 (当然希望我们使用了提升...)
尽管如此,它确实没有改变我们开发代码的方式。面向对象的设计,有或没有托管指针,非常相似。有时你需要返回对象,或指向对象的指针更重要的时候。关于智能指针的好处只与您设计应用程序的方式有关。您可以传递相同的数据,并确保它不会泄漏,而不是传递潜在危险的内存泄漏。
在这方面,有些事情你可以用智能指针做更多的事情:简化你的代码。您可以更自由地传递复杂的数据结构或类,而无需担心,而不是在每个地方返回整数或基本结构。您可以更快地构建更复杂的应用程序,而不必担心这么多。它可以让你在需要时拥有C和C ++的原始功能(如果你不需要它,你为什么要使用C或C ++?)并且易于内存管理,这样可以提高生产力。如果自动管理的内存没有用,那么它几乎不会出现在地球上的所有其他语言中!
答案 1 :(得分:3)
STL / Boost是这项工作的工具。他们帮助我实现我的想法,而不是相反。澄清:Boost没有提高我的OOD技能。
答案 2 :(得分:3)
它彻底改变了我的编码方式,而且我正在传播这个词。特别是通过使用Boost.Graph和Boost.PropertyMap,我意识到我可以在一个简单的类中编写“真正的”算法,而不是(尚)知道如何访问信息,甚至不知道(或关心)什么子动作可能在执行算法时完成。 我的团队现在正在使用图形工具设计复杂的计算功能。
有人可能会说模板确实是这种变化的基础,但Boost显然为此铺平了道路。对我来说,发现新的Boost库通常是学习可以应用于我们日常工作的重要内容的绝佳机会!
答案 3 :(得分:1)
一旦我发现boost::bind
(和boost::function
)我找到了而不是在继承和抽象基类(java / c#-speak中的“接口”)方面进行思考,我开始将所有内容视为一个函子
例如,pre-boost我已经构建了一个菜单系统,其中菜单是IActionable*
项的容器,任何想要挂钩到菜单系统的东西都必须继承IActionable并提供一个动作方法。后加强,我正在实现包含boost::function<void()>
个对象的菜单,并使用boost::bind
将任何我想要的东西扔进去。
另一件事:看看boost成功使用模板的方式真的让我提高了我对它们的可能性的期望,并努力在我自己的代码中更好地利用它们,所以我写的是更多“通用”而不是“OOP”代码。
智能指针肯定是有用的并获得了大量的报道,但除了清理一些明确的删除之外,它们几乎不是范式转换。
答案 4 :(得分:0)
对我而言,它并没有改变我设计的方式,但是Boost确实给了我额外的工具,以便让某些事情变得更容易。例如,通过“智能”指针,我不再需要考虑确保某些对象创建必须在适当的时间销毁(主要是在特殊情况下)。但是像任何工具一样,我必须了解何时使用它们以及何时不使用它们。