【发布时间】:2013-01-10 11:14:50
【问题描述】:
我认为我对正常(功能性)设计模式有相当多的经验,如所述,例如在the gang of four book,我主要用在java和C#中。在这些“托管”语言中,这几乎是您完成工作所需了解的所有内容。
但是,在 C++ 世界中,开发人员还可以控制如何分配、传递和删除所有对象。我了解这些原则(我在其他文本中阅读了Stroutrup),但我仍然需要付出很多努力才能确定哪种机制最适合给定场景 - 这就是与内存相关的设计模式组合有用的地方.
例如,昨天我必须创建一个类Results,它是一些对象的容器和另一种对象的集合(在本例中为std::vector)。所以有一些设计问题我无法真正回答:
- 我应该通过值还是通过智能指针返回这个类?
- 在类内部,向量和对象应该是普通成员,还是应该再次存储为智能指针?
- 在向量中,我应该直接存储对象,还是将智能指针再次指向它们?
- 在我的 Results 类中定义的 getter 应该返回什么(即值、引用或智能指针)?
当然,智能指针很酷,但它们会造成语法混乱,我不相信对每个对象使用 malloc 是否是最佳方法。
我将不胜感激以上具体点的答案,但更希望获得一些关于内存相关设计模式的更长、更笼统的文本——这样我也可以解决周一遇到的问题!
【问题讨论】:
-
您听说过 RAII 吗?从您的问题来看,如果您熟悉 RAII,似乎还不够清楚,而且您正在谈论的事情超出了它。是这样吗?
-
Get Effective C++ By Scott Meyers 里面有一整节是关于 RAII 和内存管理等的。
-
@Nawaz,是的,我熟悉 RAII。我也有 Scotts Meyers 的书。我认为这对这种情况没有任何帮助......
标签: c++ design-patterns memory-management