一个新手的问题:我有个教学班,一些虚拟功能的层次,我想实现一个工厂方法,但我不知道什么是最好的方法:在C++中实现工厂方法的首选方法是什么?
- 返回原始指针从工厂方法并将其包装到调用方法中的智能指针中
- 返回工厂的智能指针
- 从工厂返回一个正确的对象(但它是否正确复制派生类?)并将其分配给调用方法中的本地对象
- 返回工厂的引用(但是如何创建在工厂方法中的对象没有内存泄漏?)
我将不胜感激的工厂方法和最小的客户端,这是有效的,不泄漏内存的例子。
我的背景是C#和Java,所以我有点在C++ atm中的内存管理中丢失了。
实际上,持续返回`boost :: shared_ptr`通常是一个好主意。这不是一个很大的痛苦(至少比原始指针更痛苦)。由于大多数多态层次结构是由不可复制的对象组成的(即不提供`clone`方法),共享语义往往是你想要的。虽然谨防循环依赖。 – 2011-01-24 18:34:33
@Alexandre:根据我的经验,循环依赖是真的,非常罕见。至少当你不使用事件/信号时。那些弱引用(即普通指针)可能始终是最好的解决方案。不知道。说实话,从来没有用C++做过。 – 2011-01-24 18:55:07